我有一个包含图像的网格。
<Grid Name="grid1">
<Image Name="image1" Stretch="None" Source="C:\Users\User\Desktop\image.jpg"/>
</Grid>
如果图像的大小大于网格的大小,我想通过渲染变换手动缩放它以适应网格。我不想使用 Stretch="Fill" 因为我需要比例因子。有什么方法可以检测到 UIElement 不在视野范围内的情况?我需要你的帮助。
您可以简单地将Stretch
属性设置为Uniform
(或可能),并在需要时从Image 和ImageSourceFill
的 中计算比例因子。下面的示例在 SizeChanged 处理程序中进行计算,但它可以在其他任何地方。ActualWidth
Width
<Image Name="image1" Stretch="Uniform" Source="C:\Users\User\Desktop\image.jpg"
SizeChanged="ImageSizeChanged"/>
计算如下所示:
private void ImageSizeChanged(object sender, SizeChangedEventArgs e)
{
var scale = image1.ActualWidth / image1.Source.Width;
}
与属性Uniform
的默认值一样Stretch
,您根本不必设置它。
我不确定当 WPF 可以为您完成时,您为什么要手动重新缩放图像...
不要将图像直接放入网格中,而是使用Viewbox控件:
<Grid Name="grid1">
<Viewbox>
<Image Name="image1" Stretch="None" Source="C:\Users\User\Desktop\image.jpg"/>
</Viewbox>
</Grid>
Viewbox 将自动缩放图片以适合网格内...