Cómo hacer que los elementos de una DockPanel se expanden para adaptarse a todo el espacio disponible en WPF?

StackOverflow https://stackoverflow.com/questions/983732

  •  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>
¿Fue útil?

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"

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top