2011-01-12 6 views
10

Das scheint so eine einfache Frage zu sein, aber ich habe es eine Stunde lang versucht und kann es anscheinend nicht herausfinden.Andocken/Füllen WPF

Alles, was ich tun möchte, ist das MainWindow mit einem Canvas füllen. Ich konnte keine Eigenschaften finden, um dies zu erlauben, und die einzige Art, wie ich es mir vorstellen könnte, ist Canvas.Width/Height = MainWindow.Width/Height einzustellen, aber ich würde das jedes Mal tun müssen, wenn das Fenster in der Größe geändert wird.

In WinForms Docking war ein Element in einem übergeordneten Container einfach.

Antwort

20

Legen Sie einfach den Canvas. HorizontalAlignment und VerticalAlignment zu "Stretch". Dadurch füllt der Canvas-Bereich den verfügbaren Bereich des Elements mit der Benutzeroberfläche. Stellen Sie sicher, dass Breite/Höhe NICHT explizit angegeben wird.

In XAML, das ist nur:

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

Und so stellen Sie sicher, dass Sie nicht die Breite/Höhe eingestellt haben Eigenschaften, die sich explizit auf Ihrer Arbeitsfläche befinden. – RQDQ

+0

Das funktioniert. Ich weiß, dass ich es früher versucht habe und es hat nicht funktioniert, aber wer weiß. Vielen Dank. --Bearbeiten: Ich habe wahrscheinlich die Breite/Höhe festgelegt. – Eric

+0

Beste. Von nichts anderem abhängig. –

2

Put dies für Ihre Leinwand Breite und Höhe in XAML.

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

es entsprechend ändern sollten, wenn Sie das Fenster

+2

Wie ist das besser? Ich denke, Eric's Antwort ist einfacher/robuster als diese Art von Bindung. – RQDQ

0

Nevermind Größe ändern, es Ihnen ein DockPanel hinzufügen müssen scheint:

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

Es gibt viele Möglichkeiten, dies zu tun. Dieser ist ein bisschen übertrieben, wird aber gut funktionieren. – RQDQ

+2

Tipp: Lassen Sie diese automatisch generierten Namen nicht auf Ihren Steuerelementen. Gib ihnen sinnvolle Namen. Sie werden glücklicher sein, wenn Sie nicht überprüfen müssen, ob sich das Nummernschild in textBox23 oder textBox17 befindet. Besser noch, nennen Sie sie überhaupt nicht, wenn Sie nicht auf sie verweisen müssen: In WPF sind Namen optional. –

+0

@Martinho, ich wusste nicht, Namen waren optional. Das ist praktisch. Vielen Dank. – Eric

3

In WPF können Sie Docking tun, indem Sie Ihre Artikel innerhalb einer Platzierung DockPanel und die geerbte Dock-Eigenschaft verwenden. wenn Sie das gesamte Fenster zu sein, eine Leinwand Allerdings wollen, machen es einfach so aus dem Fenster Inhalt der Leinwand ist, und nicht eine andere Art von Platte:

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