2009-06-11 17 views
11

Tengo un StackPanel que contiene un StackPanel y algunos otros artículos. El primer StackPanel tiene una orientación vertical, el interior tiene una orientación horizontal. El interno tiene un TreeView y un ListView, me gustaría que se expandan y se ajusten al ancho de la ventana, que configuro junto a la ventana y le permite al usuario cambiar. También me gustaría que el exterior StackPanel se ajuste a la altura de la ventana. ¿Cómo hago esto?¿Cómo hacer que los elementos en un DockPanel se expandan para adaptarse a todo el espacio disponible en WPF?

Editar: he convertido al uso de un DockPanel, y he establecido las propiedades DockPanel.Dock correctamente en cada uno de los elementos, y ha desactivado LastChildFill 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> 
+0

¿Podemos ver el código? – Brad

+1

¿Por qué configura LastChildFill = "False"? El valor predeterminado de True haría que el ListView llene el espacio. –

+0

De acuerdo con Henk también ... –

Respuesta

7

Esto debería hacerlo - Lo configuré para que TreeView y ListView compartieran la vista principal 50/50; si no quiere eso, configúrelo en 'Auto' y '*' o algo así. ¡Utiliza "LastChildFill" para tu 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> 
0

ancho establecido y propiedades de altura en "auto"

11

Utilice un DockPanel lugar. StackPanel explícitamente no se preocupa por el espacio visible, mientras que DockPanel hace todo su cálculo de 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, poner a todos los niños directamente en la ventana no parece ajustarse muy bien.

Actualización 2:

que sería quitar el atributo DockPanel.Dock explícita desde el elemento que desea estirar (llenar) el espacio no utilizado.

+0

Sí, DockPanel funciona muy bien. También funciona en Silverlight. –

Cuestiones relacionadas