2009-06-11 3 views
11

J'ai un StackPanel contenant un StackPanel et quelques autres articles. Le premier StackPanel a une orientation verticale, l'intérieur a une orientation horizontale. L'intérieur a un TreeView et un ListView, je voudrais qu'ils développent et ajustent la largeur de la fenêtre, que je place par la fenêtre et permettent à l'utilisateur de changer. Je voudrais également que le StackPanel extérieur s'adapte à la hauteur de la fenêtre. Comment puis-je faire cela?Comment faire pour développer des éléments dans un DockPanel pour s'adapter à tout l'espace disponible dans WPF?

Edit: Je l'ai converti en utilisant un DockPanel, et je l'ai mis les chacun des propriétés correctement DockPanel.Dock dans les é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> 
+0

Pouvons-nous voir le code? – Brad

+1

Pourquoi définissez-vous LastChildFill = "False"? La valeur par défaut de True rend le ListView remplir l'espace. –

+0

D'accord avec Henk aussi ... –

Répondre

7

Cela devrait le faire - Je l'ai configuré de sorte que TreeView et ListView partagent la vue principale 50/50; Si vous ne le souhaitez pas, réglez-le sur 'Auto' et '*' ou quelque chose comme ça. 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> 
0

largeur définie et les propriétés de hauteur "auto"

11

Utilisez un DockPanel à la place. StackPanel ne se soucie pas explicitement de l'espace visible, alors que DockPanel fait tout son calcul de taille en fonction de l'espace disponible.

Mise à jour:

En outre, 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 ne semble pas très bien dimensionner automatiquement.

Mise à jour 2:

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

+0

Oui, DockPanel fonctionne bien. Fonctionne dans Silverlight aussi. –

Questions connexes