滚动查看器 & Canvas

Scrollviewer & Canvas

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

<Window>
   <ScrollViewer>
        <Canvas  ScrollViewer.HorizontalScrollBarVisibility="Visible" 
                 ScrollViewer.VerticalScrollBarVisibility="Visible">
            <Image Source="SampleImage.jpg" />
        </Canvas>
   </ScrollViewer>
 </Window>

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

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

谢谢。

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

也许这两个链接之一可以帮助您:

  • Silverlight Canvas on Scrollviewer not triggering
  • ScrollBars are not visible after changing positions of controls inside a Canvas

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

但是,您可以明确设置 Canvas 高度和宽度:

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