2014-06-20 42 views
0

我有一個Stretch屬性設置爲Uniform的Image類(System.Windows.Controls.Image)的對象。我知道圖像控件的大小,當然還有源圖像的大小,但我正在尋找一種簡單的方法來獲取可見圖像的實際大小。從Image類獲取實際圖像大小的簡單方法。

這將更容易通過示例來解釋。我的圖像控件大小綁定到主窗口大小,如果它的大小是1920 x 1080,並且源圖像的大小是500 x 500,則會看到大小爲1080 x 1080的圖像。是否有一種簡單的方法可以獲得此大小?

+0

你試過['ActualHeight'(HTTP:// MSDN。 microsoft.com/en-us/library/system.windows.frameworkelement.actualheight(v=vs.110).aspx)和['ActualWidth'](http://msdn.microsoft.com/zh-cn/library/ system.windows.frameworkelement.actualwidth(v = vs.110).aspx)屬性? – chridam

回答

1

您不應該將Image控件的大小綁定到窗口大小。相反,使用Grid作爲容器。它會自動調整圖像子元素的大小。然後ActualWidthActualHeight性能直接返回控制的實際尺寸:

<Grid> 
    <Image Source="..." SizeChanged="Image_SizeChanged"/> 
</Grid> 

在代碼中獲取的屬性後面:

private void Image_SizeChanged(object sender, SizeChangedEventArgs e) 
{ 
    var image = (Image)sender; 
    Trace.TraceInformation("Size = {0} x {1}", image.ActualWidth, image.ActualHeight); 
} 
+0

我會試試這個,但是我很擔心,因爲我不需要Image控件的大小,我需要可見圖像的大小。這個解決方案是否會縮放圖像控件,並且它是圖像源來填充網格? – straku

+0

這正是Grid所做的。 – Clemens

+0

通過編寫「綁定」我並不是說我將高度和寬度屬性綁定到主窗口大小。在佈局頂部有網格,圖像位於其內部,垂直和水平對齊設置爲拉伸。我不知道爲什麼我加載圖像後得到ActualHeight = ActualWidth = 0.0。有任何想法嗎? – straku

1

您需要計算比例因子。這將取決於圖像尺寸和控件尺寸之間的關係。

首先,分別計算水平和垂直縮放因素:

double hscale = (double)image.Width/imageControl.Width; 
double vscale = (double)image.Height/imageControl.Height; 

所以,如果你通過hscale乘以圖像的寬度,其結果必然是控制的寬度。現在

,因爲要保持縱橫比,你需要選擇最小的兩個是你的縮放係數:

double scaleFactor = Math.Min(hscale, vscale); 

然後你就可以計算圖像,這將是大小顯示:

displayedWidth = image.Width * scaleFactor; 
displayedHeight = image.Height * scaleFactor;