当图像离开网格时获取图像的缩放因子

时间:2013-01-08 12:34:54

标签: wpf image grid scale out

我有一个包含图像的网格。

<Grid Name="grid1">
    <Image Name="image1" Stretch="None" Source="C:\Users\User\Desktop\image.jpg"/>
</Grid>

如果图像的大小大于网格的大小,我想通过渲染变换手动缩放它以适合网格。我不想使用Stretch =“Fill”,因为我需要比例因子。 有没有办法检测UIElement不在视线范围内的情况? 我需要你的帮助。

2 个答案:

答案 0 :(得分:3)

您只需将Stretch属性设置为Uniform(或可能是Fill),然后根据图片ActualWidthWidth计算缩放系数无论何时需要,都可以使用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;
}

由于UniformStretch属性的默认值,因此您根本不需要设置它。

答案 1 :(得分:2)

我不确定为什么你会想要在WPF为你做的时候手动重新缩放你的图像......

使用 Viewbox 控件,而不是将图像直接放入网格中:

<Grid Name="grid1">
    <Viewbox>
        <Image Name="image1" Stretch="None" Source="C:\Users\User\Desktop\image.jpg"/>
    </Viewbox>
</Grid>

Viewbox会自动缩放图片以适应网格...