如何防止WPF剪切图像?

时间:2013-02-26 15:01:18

标签: wpf clipping

我正在编写一个显示最初居中的图像的WPF应用程序。用户可以放大/缩小并移动图像,这些图像是使用ScaleTransformTranslateTransform实现的。这很有效。

问题是当图像明显大于窗口时,用户移动图像或缩小到足以使整个图像可见。最初隐藏的图像部分不会被渲染,而是仅绘制图像的原始可视部分。

基于某些other questions,如果我将我的图片放在Canvas内,这将导致整个图像被渲染,并且在移动时它将被正确渲染。问题是我不希望我的图像位于Canvas,因为这会阻止任何其他布局发生 - HorizontalAlignmentVerticalAlignment属性会被忽略(因此图像是不再居中),我需要实现一个选项,它将尽可能大地绘制图像以填充不再有效的窗口的整个区域(将Stretch属性设置为UniformToFill不会'做任何事情。)

目前,这两个转换设置为RenderTransform属性。如果我改为使用LayoutTransform,则会绘制整个图像,但这也会阻止用户将图像的任何部分移出窗口边缘(这是我想保留的行为)。

如何在不使用CanvasLayoutTransform的情况下告诉WPF始终呈现整个图像?

1 个答案:

答案 0 :(得分:1)

我建议不要使用TranslateTransform,而是依赖ScrollViewer。

<ScrollViewer>
   <Grid>
      <Image Source="blabla">
          <Image.LayoutTransform>
              <ScaleTransform />
          </Image.LayoutTransform>
      </Image>
   </Grid>
</ScrollViewer>

ScrollViewer为图像提供无限空间展开,整个图像将被渲染。网格强制居中布局,同时仍允许图像扩展。如果您不喜欢滚动条来控制翻译,那么您可以隐藏它们并滚动您自己的解决方案。

LayoutTransform是定义的方式,因此图像的实际大小(以缩放为单位)会正确反映到窗口上。