2014-04-04 57 views
11

我在視圖中有以下標記。當在視圖的啓動代碼中獲得WindowContainer.Width時,它將返回NaN爲什麼我的網格寬度爲NaN?

<Border BorderThickness="10"> 
    <StackPanel x:Name="Panel" Orientation="Vertical" > 
    <Grid x:Name="WindowContainer" HorizontalAlignment="Stretch" VerticalAlignment="Stretch" Loaded="WindowContainer_OnLoaded"> 
     <delphi:Win32WindowHost x:Name="Host" /> 
    </Grid> 
    <TextBlock x:Name="InfoTextBlock" HorizontalAlignment="Right" /> 
    </StackPanel> 
</Border> 

Stretch是否讓網格伸展以容納其所有內容或填充其容器?我希望它可以伸展以填充容器,即Border,並且具有合適的寬度,我可以使用該寬度來調整浮動窗口的大小。

+5

'Double.NaN'只是'Width'屬性的默認值。這意味着沒有明確設置寬度。您應該始終使用'ActualWidth'屬性來獲取元素的實際寬度。 – Clemens

回答

16

Does Stretch make the grid stretch to accomodate all its content, or to fill its container?

MSDNHorizontalAlignment="Stretch"

子元素被拉伸,以填補父元素的已分配佈局空間。明確的WidthHeight值優先。


Why is my Grid's width NaN?

NaN是指 「未設置」。 FrameworkElement是WPF中許多控件的基類,如果您沒有明確設置高度和寬度屬性,那麼在類構造函數中默認值爲NaN


When I get WindowContainer.Width during start-up code for the view, it returns NaN

在這種情況下,嘗試獲得ActualWidth,而不是Width,因爲:

ActualWidth屬性是基於其他寬輸入的計算值,和佈局系統。該值由佈局系統本身根據實際渲染過程設置,因此可能略微落後於屬性的設置值,例如作爲輸入更改基礎的寬度。

+1

我在網格的OnInitialized事件中得到0.0。我應該在視圖啓動後期獲得價值嗎? – ProfK

+1

@ProfK:是的,例如,嘗試在'Loaded =「WindowContainer_OnLoaded」'中獲取這些值。 –

+0

在這種情況下,我得到了「ActualWidth」的正確值,但ActualHeight仍然返回0.0 – ProfK

相關問題