没有 Stretch="Fill" 的 WPF 拉伸图像

Posted

技术标签:

【中文标题】没有 Stretch="Fill" 的 WPF 拉伸图像【英文标题】:WPF stretch image without Stretch="Fill" 【发布时间】: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 【参考方案1】:

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

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

【讨论】:

以上是关于没有 Stretch="Fill" 的 WPF 拉伸图像的主要内容,如果未能解决你的问题,请参考以下文章

Image控件的Stretch属性

Debian 9.x "stretch" 解决 /etc/rc.local 开机启动问题

Debian 9.x "stretch" 解决 /etc/rc.local 开机启动问题

wpf如何显示gif图片

setVisibility(View.VISIBLE)失效

wpf中自定义控件的大小怎样听从外部容器的安排