2009-06-11 10 views
11

Ich habe eine StackPanel enthält eine StackPanel und einige andere Elemente. Die erste StackPanel hat eine vertikale Ausrichtung, die innere eine horizontale Ausrichtung. Der innere hat eine TreeView und eine ListView, ich möchte, dass sie die Breite des Fensters erweitern und anpassen, die ich durch das Fenster einstelle und dem Benutzer erlaube, zu ändern. Ich würde auch gerne die äußere StackPanel an die Höhe des Fensters anpassen. Wie mache ich das?Wie können Elemente in einem DockPanel so erweitert werden, dass sie den gesamten verfügbaren Platz in WPF einnehmen?

Edit: I umgewandelt habe eine DockPanel zu verwenden, und ich habe die DockPanel.Dock Eigenschaften korrekt in jedem der Elemente festgelegt und haben behinderte LastChildFill in beiden der dockpanels, das Layout noch nicht ausdehnt.

Der 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

Können wir den Code sehen? – Brad

+1

Warum setzen Sie LastChildFill = "False"? Der Standardwert von True würde das ListView den Raum füllen. –

+0

Einverstanden mit Henk auch ... –

Antwort

7

Dies sollte es tun - ich habe es eingerichtet, so dass die TreeView und die ListView die Hauptansicht 50/50 geteilt; Wenn Sie das nicht wollen, stellen Sie es auf 'Auto' und '*' oder so. Nutzen Sie "LastChildFill" zu Ihrem Vorteil!

<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

Set Breite und Höhe Eigenschaften auf "auto"

11

Verwenden Sie einen DockPanel statt. StackPanel kümmert sich explizit nicht um den sichtbaren Bereich, während DockPanel alle Größenberechnungen basierend auf dem verfügbaren Platz durchführt.

Update:

Außerdem in meiner Erfahrung, um den Körper des Fensters in eine Ansicht setzen, und mit nur den Blick in das Fenster für eine Erfahrung besser Auto macht Größe.

Aus irgendeinem Grund scheint es nicht sehr gut, alle Kinder direkt in das Fenster zu stellen.

Update 2:

Ich würde das explizite DockPanel.Dock Attribut aus dem Element entfernen, die Sie (füllen), um den ungenutzten Raum strecken möchten.

+0

Ja, DockPanel funktioniert gut. Funktioniert auch in Silverlight. –