Cómo hacer que los elementos de una DockPanel se expanden para adaptarse a todo el espacio disponible en WPF?
-
13-09-2019 - |
Pregunta
Tengo un StackPanel
contiene un StackPanel
y algunos otros artículos. La primera StackPanel
tiene una orientación vertical, el la interior tiene una orientación horizontal. El interior tiene un TreeView
y una ListView
, me gustaría que se expandan y se ajustan a la anchura de la ventana, la cual di por la ventana y permiten al usuario cambiar. También me gustaría la StackPanel
exterior para adaptarse a la altura de la ventana. ¿Cómo puedo hacer esto?
Editar
Me he convertido al uso de un DockPanel
, y he establecer las propiedades DockPanel.Dock
correctamente en cada uno de los elementos, y tienen LastChildFill
discapacitados en los dos dockpanels, el diseño sigue sin estirar.
El código:
<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>
Solución
Esto debe hacerlo - lo configuro para que el TreeView y ListView compartieron la vista principal de 50/50; Si usted no quiere que, ponerlo en 'Auto' y '*' o algo así. Use "LastChildFill" a su ventaja!
<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>
Otros consejos
Utilice un DockPanel lugar. StackPanel explícitamente no se preocupa por espacio visible, mientras que DockPanel hace todo el cálculo de su tamaño en función del espacio disponible.
Actualización:
Además, en mi experiencia, poner el cuerpo de la ventana en una vista, y sólo tener la vista en la ventana hace que para una mejor experiencia de tamaño automático.
Por alguna razón, poniendo todos los niños directamente en la ventana parece que no tamaño automático muy bien.
Actualización 2:
Me gustaría quitar el atributo DockPanel.Dock explícita desde el elemento que desea estirar (llenar) el espacio no utilizado.
ancho establecido y altura propiedades de "auto"