Come rendere gli elementi in un DockPanel si espandono per adattarsi tutto lo spazio disponibile in WPF?
-
13-09-2019 - |
Domanda
Ho un StackPanel
contenente un StackPanel
e alcuni altri oggetti. Il primo StackPanel
ha un orientamento verticale, la quella interna ha un orientamento orizzontale. Quello interno ha un TreeView
e ListView
, desidero loro di espandersi e adattarsi alla larghezza della finestra, che ho impostato dalla finestra e consentono all'utente di cambiare. Vorrei anche il StackPanel
esterna per adattare l'altezza della finestra. Come posso fare questo?
Modifica
Ho convertito utilizzando un DockPanel
, e ho impostare le proprietà DockPanel.Dock
correttamente in ciascuno degli elementi, e hanno LastChildFill
disabilitato in entrambe le dockpanels, il layout continua a non allungare.
Il codice:
<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>
Soluzione
Questo dovrebbe farlo - ho impostato in modo che il controllo TreeView e ListView condiviso la vista principale 50/50; se non si vuole che, impostarla su 'Auto' e '*' o qualcosa del genere. Utilizzare "LastChildFill" a vostro vantaggio!
<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>
Altri suggerimenti
Utilizzare un DockPanel invece. StackPanel esplicitamente non si preoccupa di spazio visibile, mentre DockPanel fa tutto calcoli sue dimensioni in base allo spazio a disposizione.
Aggiornamento:
Inoltre, nella mia esperienza, mettendo il corpo della finestra in una vista, e solo avendo la vista nella finestra fa per una migliore esperienza Auto Size.
Per qualche ragione di mettere tutti i bambini direttamente nella finestra sembra non automatico delle dimensioni molto bene.
Aggiornamento 2:
Vorrei rimuovere l'attributo DockPanel.Dock esplicito l'elemento che si desidera allungare (riempimento) lo spazio inutilizzato.
Set di larghezza e altezza di immobili da "auto"