2011-01-12 10 views
10

Sembra una domanda così semplice, ma ho cercato per un'ora e non riesco a capirlo.Ancoraggio/riempimento in WPF

Tutto ciò che voglio fare è riempire la finestra principale con una tela. Non sono riuscito a trovare alcuna proprietà per consentire ciò e l'unico modo in cui potrei pensare di farlo è impostare Canvas.Width/Height = MainWindow.Width/Height, ma dovrei farlo ogni volta che la finestra viene ridimensionata.

In WinForms l'aggancio di un elemento in un contenitore padre era semplice.

risposta

20

Basta impostare la tela. HorizontalAlignment e VerticalAlignment su "Stira". Ciò farà sì che il Canvas riempia lo spazio disponibile dal suo elemento contenente UI. Assicurati di NON specificare esplicitamente Larghezza/Altezza.

In XAML, questo è solo:

<Window ...Other window props... > 
    <Canvas HorizontalAlignment="Stretch" VerticalAlignment="Stretch"> 
     <!-- Canvas items here... --> 
    </Canvas> 
</Window> 
+3

E solo assicurarsi di non aver impostato la larghezza/altezza proprietà esplicitamente sulla tua tela. – RQDQ

+0

Questo funziona. So che l'ho provato prima e non funzionava, ma chi lo sa. Grazie. --Modifica: probabilmente ho impostato la larghezza/altezza. – Eric

+0

Il migliore. Non dipende da nient'altro. –

2

mettere questo per la larghezza e l'altezza di tela in XAML.

Width="{Binding Path=ActualWidth, ElementName=Window1}" 
Height="{Binding Path=ActualHeight, ElementName=Window1}" 

dovrebbe cambiare di conseguenza quando si ridimensiona la finestra

+2

Come va meglio? Penso che la risposta di Eric sia più semplice/robusta del fare questo tipo di rilegatura. – RQDQ

0

Nevermind, sembra si deve aggiungere un DockPanel:

<DockPanel Name="dockPanel1"> 
    <Canvas Name="canvas1" Background="White"></Canvas> 
</DockPanel> 
+0

Ci sono molti modi per farlo. Questo è un po 'eccessivo, ma funzionerà bene. – RQDQ

+2

Suggerimento: non lasciare i nomi generati automaticamente sui tuoi controlli. Dai loro nomi significativi. Sarai più felice quando non dovrai controllare se il numero di targa è in textBox23 o textBox17. Meglio ancora, non nominarli affatto se non è necessario farvi riferimento: nei nomi WPF sono opzionali. –

+0

@ Martin, non sapevo che i nomi fossero facoltativi. È conveniente Grazie. – Eric

3

In WPF si può fare una docking mettendo le voci all'interno di un DockPanel e utilizzo della proprietà ereditata da Dock. Tuttavia, se si desidera che l'intera finestra di essere una tela di canapa, basta fare in modo contenuto della finestra è la tela, e non un altro tipo di pannello:

<Window ...> 
    <Canvas> 
     <!-- blah blah --> 
    </Canvas> 
</Window>