【问题标题】:WPF stretch image without Stretch="Fill"没有 Stretch="Fill" 的 WPF 拉伸图像
【发布时间】:2021-08-17 02:11:24
【问题描述】:

我正在尝试制作显示图像的响应式 WPF 应用程序。该程序的功能之一是通过单击并拖动鼠标来选择图像的一部分。我使用Point p = e.GetPosition((IInputElement)sender); 来查找光标位置,但我发现我不能使用Stretch="Fill",因为它会导致 MouseUp 光标选择的位置比它应该选择的低一点,而且 MouseMove 也不准确(我必须将鼠标拖得更远我应该)。在互联网上,我发现这种行为的原因是您不能使用Fill,而必须使用None。但是,如果没有Fill,图像会小很多。

这是我的 XAML:

<Grid Grid.Row = "1"
      Grid.Column="1" 
      HorizontalAlignment="Left" 
      VerticalAlignment= "Top"
      Margin="0,30,0,0">
    <Image x:Name= "image1"
           Grid.Row = "1"
           Grid.Column="1"
           Cursor="Cross" 
           MinWidth="300" 
           MinHeight="300" 
           MaxWidth="512" 
           MaxHeight= "512"
           Stretch = "None"
           RenderOptions.BitmapScalingMode="NearestNeighbor" 
           RenderOptions.EdgeMode="Aliased" 
           VerticalAlignment="Top" 
           MouseDown="picOriginal_MouseDown" 
           MouseMove="picOriginal_MouseMove" 
           MouseUp="picOriginal_MouseUp" />
</Grid>

我不知道如何嵌入我的图像,以便在窗口视图中填充没有此Fill 属性的网格,同时响应全屏。我应该用 WPF 工具箱中的其他东西包装 Image 吗?

【问题讨论】:

  • 我检查了您的 XAML,但发现 Stretch="Fill" 和 Stretch="None" 在鼠标位置方面没有明显区别。
  • 选择一张图片是什么意思?视图框可能会有所帮助,但您让我们猜到了您在做什么。
  • @Andy 对不起,如果我没有说清楚。假设有一张照片,我们想用鼠标标记某个正方形区域,以放大该区域。并且显示该区域(放大)而不是之前的照片。而且我已经有了这个功能,但是由于Stretch = Fill,鼠标并没有在图像周围非常准确地移动——或者至少这是我在某个论坛上读到的。我的问题是:除了 Stretch 属性之外,还有其他方法可以获得响应式图像吗?
  • 在应用 Stretch = Fill 之后,您应该使用 p.X * image.ScaleX 和 p.Y * image.ScaleY 而不是 p.X 和 p.Y

标签: c# wpf image fill stretch


【解决方案1】:

我发现使用图片框的背景作为图像然后在其中使用拉伸更容易。或者,您可以将图像与任何其他选项一起使用,尝试使用属性选项卡,以下是其他拉伸选项:无、填充、均匀、均匀填充

如果这有帮助,请告诉我,尝试获得代表,谢谢!

【讨论】: