Wie macht man Elemente in einem DockPanel erweitern den gesamten verfügbaren Platz in WPF passen?
-
13-09-2019 - |
Frage
Ich habe eine StackPanel
eine StackPanel
und einige andere Teile enthält. Der erste StackPanel
hat eine vertikale Ausrichtung, die die innere hat eine horizontale Ausrichtung. Die innere hat eine TreeView
und ein ListView
, würde Ich mag sie die Breite des Fensters zu erweitern und passen, die ich durch das Fenster gesetzt und ermöglicht es dem Benutzer zu ändern. Ich möchte auch die äußere StackPanel
die Höhe des Fensters passen. Wie mache ich das?
Edit:
Ich umgewandelt habe eine DockPanel
zu verwenden, und ich habe die DockPanel.Dock
Eigenschaften korrekt in jedem der Elemente festgelegt und haben in beiden der dockpanels deaktiviert LastChildFill
, das Layout noch nicht dehnen.
Der Code:
<Window x:Class="Clippy.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="MainWindow" Height="400" Width="600" MinHeight="400" MinWidth="600" Loaded="Window_Loaded" SizeChanged="Window_SizeChanged">
<DockPanel Name="wrapperDockPanel" LastChildFill="False">
<Menu Height="22" Name="mainMenu" Width="Auto" DockPanel.Dock="Top" />
<ToolBar Height="26" Name="mainToolBar" Width="Auto" DockPanel.Dock="Top" />
<DockPanel Height="Auto" Name="contentDockPanel" DockPanel.Dock="Top" LastChildFill="False">
<TreeView Name="categoryTreeView" />
<ListView Name="clipListView" />
</DockPanel>
<StatusBar Height="23" Name="mainStatusBar" DockPanel.Dock="Top" />
</DockPanel>
</Window>
Lösung
Das sollte es tun - ich es so einrichten, dass die TreeView und die Listview die Hauptansicht 50/50 geteilt; wenn Sie nicht wollen, dass, setzen Sie sich auf ‚Auto‘ und ‚*‘ oder so etwas. Verwenden Sie "LastChildFill" zu Ihrem Vorteil!
<Window x:Class="Clippy.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="MainWindow" Height="400" Width="600" MinHeight="400" MinWidth="600" Loaded="Window_Loaded" SizeChanged="Window_SizeChanged">
<DockPanel LastChildFill="True">
<Menu Width="Auto" DockPanel.Dock="Top" />
<ToolBar Width="Auto" DockPanel.Dock="Top" />
<StatusBar DockPanel.Dock="Bottom" />
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="0.5*" />
<RowDefinition Height="0.5*" />
</Grid.RowDefinitions>
<TreeView Name="categoryTreeView" Grid.Row="0" />
<ListView Name="clipListView" Grid.Row="1" />
</Grid>
</DockPanel>
</Window>
Andere Tipps
Verwenden Sie stattdessen eine DockPanel. Stackpanel ausdrücklich nicht über sichtbaren Raum kümmern, während DockPanel all seine Größe Berechnung tut basierend auf dem verfügbaren Raum.
Update:
Darüber hinaus in meiner Erfahrung, in eine Ansicht des Körpers des Fensters setzen, und mit nur den Blick in das Fenster sorgt für eine bessere Auto Size Erfahrung.
Aus irgendeinem Grund alle Kinder direkt in die Fenster setzen scheint nicht automatisch Größe sehr gut.
Update 2:
Ich würde das explizite DockPanel.Dock Attribut aus dem Element entfernen, die Sie (füllen), um den ungenutzten Raum strecken möchten.
Setzen Sie Breite und Höhe Eigenschaften auf "auto"