【问题标题】:Scrollviewer & Canvas滚动查看器和画布
【发布时间】:2015-05-28 19:46:09
【问题描述】:

我正在尝试在画布中加载图像,这样,如果图像的大小超出画布,则应激活滚动条(MS Paint 样式)

<Window>
   <ScrollViewer>
        <Canvas  ScrollViewer.HorizontalScrollBarVisibility="Visible" 
                 ScrollViewer.VerticalScrollBarVisibility="Visible">
            <Image Source="SampleImage.jpg" />
        </Canvas>
   </ScrollViewer>
 </Window>
  • 现在Canvas 被拉伸到Window 的大小,滚动条不会出现,因为Canvas 实际上并没有溢出Window
  • 其次,由于ImageCanvas 大得多,它会被限制在Canvas 的范围内,所以ScrollViewer 不认为它的内容:Canvas 实际上是溢出的。

StackPanels 也经常发生这种情况,即使绑定的数据有数十行,但滚动条仍然没有被激活。有时滚动查看器对我来说似乎很神秘。

那么,在使用ScrollViewer控件时应该牢记的基本逻辑是什么。

谢谢。

编辑:刚刚编辑了问题标题,这样任何对画布有问题的人都可以在搜索中轻松找到这个问题。

【问题讨论】:

  • 删除画布,它应该可以工作
  • 是的,但为什么不使用画布。如果图像不仅仅是窗口的控制,你可能有菜单、工具栏、状态栏等,因此它应该有另一个容器而不是Window
  • 看我的回答,为什么不用画布。如果有更多元素,只需将 Canvas 替换为 Grid 即可。仅当您不关心其大小时才使用 Canvas。出于滚动目的,您需要知道画布大小。 ScrollViewer 没有什么神秘之处:)

标签: wpf xaml scrollviewer


【解决方案1】:

From MSDN: Canvas 是唯一没有固有布局特征的面板元素。 Canvas 的默认高度和宽度属性为零,除非它是自动调整其子元素大小的元素的子元素。 Canvas 的子元素永远不会调整大小,它们只是定位在指定的坐标处。这为不需要或不需要固有尺寸约束或对齐的情况提供了灵活性。对于您希望子内容自动调整大小和对齐的情况,通常最好使用 Grid 元素。

悬停,您可以明确设置画布高度和宽度:

<ScrollViewer Height="100" Width="200">
    <Canvas Height="400" Width="400">
            //Content here
    </Canvas>
</ScrollViewer>

【讨论】:

【解决方案2】:
猜你喜欢
  • 1970-01-01
  • 2012-08-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-05-18
  • 1970-01-01
  • 1970-01-01
  • 2017-07-03
相关资源
最近更新 更多