1

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

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

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

4

2 回答 2

3

您可以简单地将Stretch属性设置为Uniform(或可能),并在需要时从Image 和ImageSourceFill的 中计算比例因子。下面的示例在 SizeChanged 处理程序中进行计算,但它可以在其他任何地方。ActualWidthWidth

<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,您根本不必设置它。

于 2013-01-08T13:38:04.747 回答
2

我不确定当 WPF 可以为您完成时,您为什么要手动重新缩放图像...

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

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

Viewbox 将自动缩放图片以适合网格内...

于 2013-01-08T12:49:52.067 回答