2015-05-28 68 views
1

我想一个画面内加载图像,从而,如果图像的大小超出画布,滚动条应该得到激活(MS画图风格)的ScrollViewer和帆布

<Window> 
    <ScrollViewer> 
     <Canvas ScrollViewer.HorizontalScrollBarVisibility="Visible" 
       ScrollViewer.VerticalScrollBarVisibility="Visible"> 
      <Image Source="SampleImage.jpg" /> 
     </Canvas> 
    </ScrollViewer> 
</Window> 
  • 现在,作为Canvas延伸到Window的大小,滚动条不会出现,因为Canvas实际上并没有溢出Window
  • 其次,作为ImageCanvas大得多,它是越来越修剪在Canvas界限,所以ScrollViewer并不认为它的内容:Canvas实际上四溢。

它也发生了很多时间StackPanel s,即使绑定的数据有几十行,但滚动条仍然没有被激活。有时候,scrollviewers对我来说显得神秘。

那么,使用ScrollViewer控件时应该记住什么基本逻辑。

谢谢。

编辑:刚刚编辑问题标题,让任何有问题的人都可以在搜索中轻松得到这个问题。

+0

取出画布,它应该工作 –

+0

是的,但为什么不能用帆布。如果图像不仅仅是窗口的控制,你可能有菜单,工具栏,状态栏等等,因此它应该有另一个容器而不是'Window'。 – Marshal

+1

看到我的答案,为什么不用帆布。如果有更多的元素,只需用Grid替换Canvas。只有当你不关心它的大小时才使用Canvas。为了滚动目的,您需要知道画布大小。有没有神秘的ScrollViewer :) – Liero

回答

5

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

Hovever,您可以设置画布高度和宽度明确地:

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

是的,我刚刚在这里看到了这个答案:[WPF:如何使画布自动调整大小?](http://stackoverflow.com/questions/855334/wpf-how-to-make-canvas - 自动调整大小/ 863108#863108)。 – Marshal