我有一个包含图像的网格。
<Grid Name="grid1">
<Image Name="image1" Stretch="None" Source="C:\Users\User\Desktop\image.jpg"/>
</Grid>
如果图像的大小大于网格的大小,我想通过渲染变换手动缩放它以适合网格。我不想使用Stretch =“Fill”,因为我需要比例因子。 有没有办法检测UIElement不在视线范围内的情况? 我需要你的帮助。
答案 0 :(得分:3)
您只需将Stretch
属性设置为Uniform
(或可能是Fill
),然后根据图片ActualWidth
和Width
计算缩放系数无论何时需要,都可以使用ImageSource。下面的示例在SizeChanged处理程序中进行计算,但它可能位于其他任何位置。
<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
属性的默认值,因此您根本不需要设置它。
答案 1 :(得分:2)
我不确定为什么你会想要在WPF为你做的时候手动重新缩放你的图像......
使用 Viewbox 控件,而不是将图像直接放入网格中:
<Grid Name="grid1">
<Viewbox>
<Image Name="image1" Stretch="None" Source="C:\Users\User\Desktop\image.jpg"/>
</Viewbox>
</Grid>
Viewbox会自动缩放图片以适应网格...