当尺寸过大时,画布会被裁剪

时间:2016-02-18 13:06:06

标签: wpf canvas

我正在使用带有ImageBrush的画布来显示图像。我将画布的大小设置为图像的原始大小,以便在移动鼠标等时获取坐标。

问题在于,当我将画布放在一个较小尺寸的控件(例如Grid)中时,Canvas会被剪裁。

  <Grid>
    <Canvas Width="{Binding ImageWidth}" Height="{Binding ImageHeight}" >
        <Canvas.Background>
          <ImageBrush ImageSource="{Binding Image, Converter={StaticResource imgConverter}}"/>
        </Canvas.Background>
    </Canvas>
  </Grid>

有没有办法保持画布大小而不被剪裁?

1 个答案:

答案 0 :(得分:1)

我已经意识到要深入挖掘信息源以找出剪辑发生一段时间的地方,但是从来没有开始这样做。当这种情况发生时,我一直在使用一个不太好的把Grid插入可视树的技巧。

有许多控件夹住儿童视觉效果; StackPanelCanvas等。正如我所提到的,通常的快速解决方法是在导致剪辑的容器后使用<StackPanel> <Grid> <Canvas Width="{Binding ImageWidth}" Height="{Binding ImageHeight}" > <Canvas.Background> <ImageBrush ImageSource="{Binding Image, Converter={StaticResource imgConverter}}"/> </Canvas.Background> </Canvas> </Grid> </StackPanel>

在您的代码段中,视觉树上方是否有更多容器?

如果深度实际上是这样的: -

Canvas

然后这可能会导致裁剪。如果您在可视树中向上插入另一个<StackPanel> <Canvas> <Grid> <Canvas Width="{Binding ImageWidth}" Height="{Binding ImageHeight}" > <Canvas.Background> <ImageBrush ImageSource="{Binding Image, Converter={StaticResource imgConverter}}"/> </Canvas.Background> </Canvas> </Grid> </Canvas> </StackPanel> ,则会删除此剪辑。

DateTimePicker

如果这种解决方法改变了其他控件的其他布局需求,则可能会出现问题。