2014-04-04 14 views
11

Ho il seguente mark-up in una vista. Quando ottengo WindowContainer.Width durante il codice di avvio per la vista, restituisce NaN.Perché la larghezza della mia griglia 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> 

Vuol Stretch rendere il tratto griglia per ospitare tutto il suo contenuto, o per riempire il suo contenitore? Voglio che si allunghi per riempire il contenitore, lo Border, e che abbia una larghezza double corretta che posso usare per ridimensionare una finestra mobile con le stesse dimensioni.

+5

'Double.NaN' è solo il valore predefinito della proprietà' Larghezza'. Significa che nessuna larghezza è impostata in modo esplicito. Si dovrebbe sempre usare la proprietà 'ActualWidth' per ottenere la larghezza effettiva di un elemento. – Clemens

risposta

16

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

Da MSDN su HorizontalAlignment="Stretch":

Elementi figlio sono allungati per riempire lo spazio allocato il layout dell'elemento genitore. I valori espliciti Width e Height hanno la precedenza.


Why is my Grid's width NaN?

NaN sta a significare "non impostato". FrameworkElement è la classe base per molti controlli in WPF e se non si impostano esplicitamente le proprietà Height e Width, nel costruttore della classe sarà un valore predefinito di NaN.


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

In questo caso provare ottenere il ActualWidth, anziché Width, perché:

ActualWidth proprietà è un valore calcolata base a input larghezza, e il sistema di layout. Il valore viene impostato dal sistema di layout stesso, in base a un passaggio di rendering effettivo e può quindi essere leggermente inferiore al valore impostato di proprietà come Larghezza che sono alla base della modifica dell'input.

+1

Ottengo 0.0 nell'evento 'OnInitialized' della griglia. Dovrei ottenere il valore più tardi nell'avvio della vista? – ProfK

+1

@ProfK: Sì, prova ad ottenere questi valori in 'Loaded =" WindowContainer_OnLoaded "' per esempio. –

+0

Ottengo il valore corretto per 'ActualWidth', in tal caso, ma' ActualHeight' restituisce ancora 0.0 – ProfK

Problemi correlati