Comment faire des articles dans un DockPanel développer pour adapter l'espace disponible dans WPF?

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

  •  13-09-2019
  •  | 
  •  

Question

J'ai un StackPanel contenant un StackPanel et d'autres articles. Le premier StackPanel a une orientation verticale, l'une interne a une orientation horizontale. L'une interne a une TreeView et un ListView, je souhaite qu'elles se dilatent et la largeur de la fenêtre, que je fixé par la fenêtre et permettre à l'utilisateur de changer. Je voudrais également le StackPanel extérieur pour adapter à la hauteur de la fenêtre. Comment puis-je faire?

Edit: Je l'ai converti en utilisant un DockPanel, et je l'ai définir les propriétés de DockPanel.Dock correctement dans chacun des éléments, et ont LastChildFill désactivé dans les deux dockpanels, la mise en page ne fonctionne toujours pas extensible.

Le code:

<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>
Était-ce utile?

La solution

Cela devrait le faire - je l'ai mis en place afin que le TreeView et ListView ont partagé la vue principale 50/50; si vous ne voulez pas, réglez-le sur « Auto » et « * » ou quelque chose. Utilisez "LastChildFill" à votre avantage!

<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>

Autres conseils

Utilisez un DockPanel à la place. StackPanel ne se soucie pas explicitement sur l'espace visible, alors que DockPanel fait l'ensemble de ses calculs de taille en fonction de l'espace disponible.

Mise à jour:

De plus, dans mon expérience, mettre le corps de la fenêtre dans une vue, et seulement avoir la vue dans la fenêtre fait pour une meilleure expérience de Taille automatique.

Pour une raison quelconque, mettre tous les enfants directement dans la fenêtre semble pas la taille auto très bien.

Mise à jour 2:

Je supprimerais l'attribut explicite de DockPanel.Dock de l'élément que vous voulez étirer (remplir) l'espace inutilisé.

Définir les propriétés de largeur et de hauteur "auto"

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top