2013-01-08 34 views
1

我有一個包含圖像的網格。當圖像離開網格時獲取圖像的縮放因子

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

如果圖像的大小大於網格的大小,我想通過渲染變換手動縮放以適合網格。我不想使用Stretch =「Fill」,因爲我需要比例因子。 有什麼方法可以檢測到UIElement出現的情況嗎? 我需要你的幫助。

+0

語言?語境?您缺少一些信息/標籤... – PhiLho

回答

2

我不知道你爲什麼會想手動重新調整你的圖像時,WPF可以爲你做到這一點...

而不是把圖像直接進入電網,使用Viewbox控制:

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

視框中會自動縮放圖片以適應網格內...

+0

如果沒有Viewbox,您會不會達到完全一樣的效果,但將'Image.Stretch'設置爲'Uniform'(這是'Viewbox.Stretch'的默認值)? – Clemens

2

你可以簡單地將Stretch屬性設置爲Uniform(或p可能Fill),並根據圖像的ActualWidth和ImageSource的Width計算縮放因子,只要您需要它。下面的示例在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屬性的默認值,你就不必設置它。