Scrollviewer&画布

时间:2015-05-28 11:08:34

标签: wpf xaml scrollviewer

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

<Window>
   <ScrollViewer>
        <Canvas  ScrollViewer.HorizontalScrollBarVisibility="Visible" 
                 ScrollViewer.VerticalScrollBarVisibility="Visible">
            <Image Source="SampleImage.jpg" />
        </Canvas>
   </ScrollViewer>
 </Window>
  • 现在Canvas被拉伸到Window的大小,滚动条不会显示为Canvas实际上并没有溢出{{1} }}。
  • 其次,由于WindowImage大得多,它会被Canvas的边界剪切,所以Canvas并不认为它的内容:ScrollViewer实际上已经溢出。

Canvas也会发生很多时间,即使绑定数据有几十行,但滚动条仍然无法激活。有时滚动查看器对我来说似乎很神秘。

因此,使用StackPanel控件时应记住的基本逻辑应该是什么。

谢谢。

修改:刚编辑了问题标题,以便任何有问题的画布都可以在搜索中轻松获得此问题。

2 个答案:

答案 0 :(得分:5)

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

Hovever,你可以明确地设置Canvas Height和Width:

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

答案 1 :(得分:3)