2010-07-19 14 views
12

io spesso uso questo:Qual è il modo previsto di creare un'etichetta e una casella di testo affiancate in WPF?

<StackPanel> 
    <StackPanel Orientation="Horizontal"> 
    <Label>Username:</Label> 
    <TextBox /> 
    </StackPanel> 
    <StackPanel Orientation="Horizontal"> 
    <Label>Password:</Label> 
    <PasswordBox /> 
    </StackPanel> 
</StackPanel> 

Ma è uno scenario così comune, mi sento come se ci sia un modo con meno di markup.

Inoltre, c'è un impatto sulle prestazioni dell'utilizzo di così tanti pannelli dello stack?

Grazie!

+3

È basato su XML - dovrebbe essere eccessivamente prolisso ;-) –

+1

Il markup che hai mostrato è irrisorio rispetto al markup generato da Visual Studio o Expression Blend - prova a posizionare i tuoi controlli usando il designer (trascinandoli intorno) .Vedrai cosa intendo, e probabilmente non userò mai più il designer per il layout. Quello che hai lì non dovrebbe essere un problema! – Pwninstein

risposta

3

Ci sono due modi principali per fare questo, StackPanels e griglia Definizioni, e Grid non fornisce meno di markup di StackPanel. Personalmente mi piace usare le definizioni di griglia molto di più. Prendono un po 'di tempo per usarlo e ogni tanto uso ancora uno StackPanel, ma nel complesso si sentono molto più puliti quando ci si abitua. Here is a great tutorial su come usarli.

Un riferimento che potrebbe essere d'aiuto è WPF Grid Vs. StackPanel.

6

Non so perché, ma mi sono appassionato molto allo DockPanel e li uso per lo scenario che hai descritto.

<DockPanel> 
    <Label Content="Username:"/> 
    <TextBox Text="Some Text"/> 
</DockPanel> 

Il longhand (e la versione equivalente, dal momento che la posizione dock di default è a sinistra):

<DockPanel> 
    <Label DockPanel.Dock="Left" Content="Username:"/> 
    <TextBox DockPanel.Dock="Left" Text="Some Text"/> 
</DockPanel> 

Inoltre, ha una proprietà LastChildFill che è true per impostazione predefinita, rendendo l'ultimo figlio aggiunto ad esso riempire lo spazio rimanente (mi piace questa funzione). Quindi, negli esempi precedenti, lo TextBox riempirà lo spazio orizzontale disponibile rimanente. (Puoi disattivarlo facilmente passando a false)

Spero che ti aiuti !!

DockPanel documentation

3

Io per lo più preferisco Grid se gran numero di etichette e caselle di testo deve essere presente in forma, come l'immissione di dati o griglia delle proprietà tipo di controlli. La griglia fornisce molta più energia per controllare le colonne di righe width/height e il cambiamento del valore width/height in un posto influirà su tutte le righe.

Un altro vantaggio dell'utilizzo di Grid è l'allineamento, tutte le etichette e le caselle di testo (o altri controlli) saranno allineati correttamente. In caso di Stackpanel o Dockpanel, è necessario impostare in modo esplicito il wdth su ciascuna etichetta per allinearli correttamente.

È inoltre possibile utilizzare GridSplitter in Grid che può essere molto utile nel tipo di controlli PropertGrid.

Nel caso in cui siano necessarie solo una o due di queste righe e l'allineamento non è un problema, è possibile procedere con Dockpanel o StackPanel.

Problemi correlati