【发布时间】: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