2009-06-11 16 views
11

Ho uno StackPanel contenente uno StackPanel e alcuni altri articoli. Il primo StackPanel ha un orientamento verticale, quello interno ha un orientamento orizzontale. Quello interno ha un TreeView e uno ListView, mi piacerebbe che si espandessero e si adattassero alla larghezza della finestra, che ho impostato dalla finestra e consentire all'utente di cambiare. Mi piacerebbe anche l'esterno StackPanel per adattarsi all'altezza della finestra. Come faccio a fare questo?Come espandere gli elementi in un DockPanel per adattarli a tutti gli spazi disponibili in WPF?

Edit: ho convertito utilizzando un DockPanel, e ho impostare le proprietà DockPanel.Dock correttamente in ciascuno degli elementi, e hai disabilitato LastChildFill in entrambe le dockpanels, il layout continua a non allungare.

Il Codice:

<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

Possiamo vedere il codice? – Brad

+1

Perché imposti LastChildFill = "False"? Il valore predefinito di True renderebbe il ListView riempire lo spazio. –

+0

Concordato anche con Henk ... –

risposta

7

Questo dovrebbe farlo: l'ho configurato in modo che TreeView e ListView condividessero la vista principale 50/50; se non lo vuoi, impostalo su 'Auto' e '*' o qualcosa del genere. Usa "LastChildFill" a tuo vantaggio!

<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 Width e Height su "auto"

11

Utilizzare un DockPanel invece. StackPanel non si preoccupa esplicitamente dello spazio visibile, mentre DockPanel esegue tutto il calcolo delle dimensioni in base allo spazio disponibile.

Aggiornamento:

Inoltre, nella mia esperienza, mettendo il corpo della finestra in una vista, e solo avendo la vista nella finestra fa per una migliore esperienza Auto Size.

Per qualche motivo, l'inserimento di tutti i bambini direttamente nella finestra non sembra molto automatico.

Aggiornamento 2:

vorrei rimuovere l'attributo DockPanel.Dock esplicito l'elemento che si desidera allungare (riempimento) lo spazio inutilizzato.

+0

Sì, DockPanel funziona bene. Funziona anche in Silverlight. –

Problemi correlati