Pregunta ¿Cómo expandir los elementos en un DockPanel para que quepan en todo el espacio disponible en WPF?


tengo un StackPanel conteniendo un StackPanel y algunos otros artículos. El primero StackPanel tiene una orientación vertical, la interna tiene una orientación horizontal. El interno tiene un TreeView y un ListView, Me gustaría que se expandan y que se ajusten al ancho de la ventana, que configuro junto a la ventana y le permite al usuario cambiar. También me gustaría el exterior StackPanel para adaptarse a la altura de la ventana. ¿Cómo hago esto?

Editar: Me he convertido a usar un DockPanel, y he establecido el DockPanel.Dock propiedades correctamente en cada uno de los elementos, y han deshabilitado LastChildFill en ambos paneles, el diseño aún no se estira.

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>

11
2018-06-11 21:15


origen


Respuestas:


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>

7
2018-06-12 21:40



Use un DockPanel en su 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.

Actualizar:

Además, en mi experiencia, poner el cuerpo de la ventana en una Vista, y solo tener la Vista en la Ventana contribuye a 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:

Quitaría el atributo explícito DockPanel.Dock del elemento que desea estirar (rellenar) el espacio no utilizado.


11
2018-06-11 21:21



Establezca las propiedades de ancho y alto en "auto"


0
2018-06-11 21:16