2010-05-21 17 views
18

cercando di capire il seguente:Qual è la differenza tra "*" e "Auto" in Silverlight griglia di layout Definizioni

<Grid Name="Root"> 
    <Grid.RowDefinitions> 
     <RowDefinition Height="*" /> 
     <RowDefinition Height="*" /> 
     <RowDefinition Height="Auto" /> 
    </Grid.RowDefinitions> 
    <Grid.ColumnDefinitions> 
     <ColumnDefinition Width="Auto" /> 
     <ColumnDefinition Width="*" /> 
     <ColumnDefinition Width="Auto" /> 
    </Grid.ColumnDefinitions> 
</Grid> 

qualcuno mi può aiutare a spiegare la differenza tra * e Auto nel frammento di cui sopra?

grazie

risposta

24

Auto significa dare a questa colonna/riga la dimensione degli elementi contenuti.

* significa condividere il resto dello spazio disponibile con altre colonne/righe che specificano anche *.

Infatti, * equivale a 1*. È possibile specificare 2*, 3* ... N* per larghezza o altezza. L'algoritmo utilizzato da Silverlight consiste nel sommare tutti i valori di N per tutte le righe utilizzando *, quindi assegnare ad ogni riga una quota appropriata dello spazio disponibile. Ad esempio: -

<Grid.RowDefinitions> 
    <RowDefinition Height="*" /> 
    <RowDefinition Height="2*" /> 
    <RowDefinition Height="3*" /> 
    <RowDefinition Height="Auto" /> 
</Grid.Definitions> 

Questo sarebbe prima di determinare quanto alto quarta fila deve essere dal suo contenuto e sottrarre che dall'alto pieno availabe. Il resto dell'altezza verrà diviso tra le righe *. Il primo ottenendo 1/6, il secondo ottenendo 1/3 e il terzo ottenendo 1/2 dell'altezza disponibile.

1

This page (dichiaratamente Silverlight 2, ma è ancora valido) presenta alcuni esempi di utilizzo della griglia con le seguenti spiegazioni:

Per ogni riga della griglia abbiamo un elemento RowDefinition . Tutte le definizioni di riga sono racchiuse in un elemento Grid.RowDefinitions. Le prime due file sono alte 50 pixel e l'altezza del terzo è impostata su "*". Ciò indica che la riga occuperà l'intera posizione nella griglia che non viene occupata dalle altre righe.

e:

Un'altra opzione è quella di impostare la larghezza e/o l'altezza per “auto”. In questo modo, ogni colonna/riga cambia le sue dimensioni in modo da abbinare la larghezza/altezza dei controlli in essa contenuti. Ad esempio:

+0

ChrisF, grazie per la risposta. Sfortunatamente, posso segnarne solo una come risposta. – user203687

+0

@ user203687 - OK. Non c'è limite al numero di risposte che puoi votare però :) – ChrisF

2

Auto effettuerà le dimensioni di ciascuna colonna in modo che possa contenere tutto ciò che è contenuto in esso.

* utilizzerà la quantità massima di spazio disponibile. È meglio usare quando hai una colonna "sinistra" che vuoi ridimensionare a ciò che è rimasto.

Esempio Griglia di larghezza indefinita.

Scenario 1:

Column 1 | Column 2 | Column 3 
---------------------------------- 
100 Width | Auto  | 200 Width 

In questo caso la colonna 2 potrebbe essere qualsiasi cosa, compreso tra 1 e qualunque sia il contenuto che è messo in essa richiede e lo spazio massimo disponibile per la larghezza della griglia. Se la colonna 2 è stata cambiata in * e una larghezza definita nella griglia nel suo complesso, è necessario riempire lo spazio rimasto per ottenere la larghezza della griglia. Se avevi due colonne impostate come * e una larghezza di griglia definita, allora sarebbero in competizione per lo spazio rimasto e dividerlo.

Solitamente utilizzo * per una sola colonna massima (anche se questa non è una regola) se ho un controllo che è impostato su una dimensione dinamica in modo che la colonna riempia lo spazio lasciato dalle altre colonne. È fantastico se vuoi colonne di dimensioni specifiche per un controllo di dimensioni dinamiche e vuoi che certe colonne rimangano fisse e definire una colonna da espandere per riempire il resto del controllo. Auto non lo farebbe con colonne di contenuto vuote o scarse che in realtà non riempirebbero lo spazio lasciato a sinistra.

Scenario 2 (colonna 3 contiene contenuto che è 100 larghezza e la griglia ha una larghezza totale di 800):

Column 1 | Column 2 | Column 3 | Column 4 
-------------------------------------------- 
100 Width | 200 Width | Auto  | * 

colonna 3 in tal caso soltanto dimensioni di 100 larghezza. La colonna 4 ridurrebbe a 400 larghezze per riempire lo spazio rimasto.

+0

Kelsey, grazie per la risposta. Sfortunatamente, posso segnarne solo una come risposta. – user203687

Problemi correlati