Scrollviewer&Canvas

Mar*_*hal 1 wpf xaml scrollviewer

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

<Window>
   <ScrollViewer>
        <Canvas  ScrollViewer.HorizontalScrollBarVisibility="Visible" 
                 ScrollViewer.VerticalScrollBarVisibility="Visible">
            <Image Source="SampleImage.jpg" />
        </Canvas>
   </ScrollViewer>
 </Window>
Run Code Online (Sandbox Code Playgroud)
  • 现在,当Canvas拉伸到Window大小时,滚动条将不会显示为Canvas实际上没有溢出Window.
  • 其次,因为它ImageCanvas它大得多,它会被限制在其范围内Canvas,所以ScrollViewer不要认为它的内容:Canvas实际上是溢出的.

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

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

谢谢.

编辑:刚刚编辑了问题标题,因此无论是否有画布问题都可以在搜索中轻松获得此问题.

Lie*_*ero 6

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

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

<ScrollViewer Height="100" Width="200">
    <Canvas Height="400" Width="400">
            //Content here
    </Canvas>
</ScrollViewer>
Run Code Online (Sandbox Code Playgroud)