4

我正在编写一个 WPF 应用程序,它显示最初居中的图像。用户可以放大/缩小和移动图像,使用ScaleTransform和实现TranslateTransform。这很好用。

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

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

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

如何告诉 WPF 在不使用 aCanvas或 a 的情况下始终渲染整个图像LayoutTransform

4

1 回答 1

1

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

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

ScrollViewer 给了 Image 无限的扩展空间,整个图片都会被渲染出来。Grid 强制居中布局,同时仍允许图像扩展。如果您不喜欢滚动条来控制翻译,那么您可以隐藏它们并推出您自己的解决方案。

LayoutTransform 绝对是要走的路,以便图像的实际像素大小(基于缩放)正确反映到您的窗口上。

于 2013-02-26T16:11:22.437 回答