2011-10-26 67 views
8

我的窗口中有圖像控件。此圖像控件的大小設置爲「自動」。獲取WPF控件的當前大小

<Image x:Name="videoImg" Stretch="Fill" Height="Auto" Width="Auto" /> 

當我嘗試訪問時,它返回0.如何查看此控件的實際大小?它調整窗口大小。

回答

15

您可以使用.ActualHeight.ActualWidth得到控制

+0

我試過這樣做。但結果是一樣的( –

+0

@TimurMustafaev你是如何獲得值的?通過代碼後面?通過綁定?你什麼時候獲取值?控制必須在ActualHeigh和ActualWidth之前呈現,將返回一個大小 – Rachel

+0

我從我的MainWindow調用新的窗體,在這個新的窗體上有fiew控件,其中一個是Image,在窗口加載後,我嘗試獲得像這樣的大小:_imageControl.ActualWidth或_imageControl。ActualHeigh –

3

的事情是,在WidthHeight性能讓你表達所需的大小,而你想要的是呈現的渲染Height/Width大小爲 - 可以使用ActualWidthActualHeight屬性訪問(但未設置)。

應該指出的是,這些也不是靜態值,也就是說,一旦設置,它們不一定永遠保持不變,因爲它將在每個渲染序列上重新評估...

因爲[ActualHeight/ActualWidth]是一個計算值,所以您應該意識到 可能存在多個或增量報告的更改,作爲佈局系統執行各種操作的 結果。佈局系統 可能正在計算子元素所需的度量空間,父元素的約束條件,等等。

因此,根據您的要求,您可能需要考慮在適當的位置重新評估數據,例如可能在包含控件調整大小時。

1

雖然一些WPF控件在佈局和渲染時會填滿所有可用空間,但其他人卻不會。 具體而言,Image控件不是一種自行確定其大小的類型,即,在您未用width/height屬性等明確指定控件大小的情況下。

但是當缺少大小定義屬性時,網格控件會填滿所有可用空間。 Visual Studio中的頁面/窗口模板將頁面/窗口模板作爲頁面/窗口根控件的子項,並且當用戶開始在圖形編輯器中的頁面上放置控件時,用戶添加的控件首先成爲此網格的子項控制。

如果您已經使用了VS模板,並且您的圖片控件是所述網格控件的子控件,請使用x:Name屬性命名您的網格,並且您可以根據需要在網格的ActualWidth/Height屬性中使用代碼隱藏,因爲圖像控件增長到其父級網格大小 - 只要您沒有明確指定其大小或以其他方式指定其大小,即設置圖像內容。

順便說一句,內置控件的大小行爲可以改變。您可以修改控件並覆蓋相應的依賴項屬性。例如參見https://stackoverflow.com/a/6094993