Come rendere gli elementi in un DockPanel si espandono per adattarsi tutto lo spazio disponibile in WPF?

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

  •  13-09-2019
  •  | 
  •  

Domanda

Ho un StackPanel contenente un StackPanel e alcuni altri oggetti. Il primo StackPanel ha un orientamento verticale, la quella interna ha un orientamento orizzontale. Quello interno ha un TreeView e ListView, desidero loro di espandersi e adattarsi alla larghezza della finestra, che ho impostato dalla finestra e consentono all'utente di cambiare. Vorrei anche il StackPanel esterna per adattare l'altezza della finestra. Come posso fare questo?

Modifica Ho convertito utilizzando un DockPanel, e ho impostare le proprietà DockPanel.Dock correttamente in ciascuno degli elementi, e hanno LastChildFill disabilitato 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>
È stato utile?

Soluzione

Questo dovrebbe farlo - ho impostato in modo che il controllo TreeView e ListView condiviso la vista principale 50/50; se non si vuole che, impostarla su 'Auto' e '*' o qualcosa del genere. Utilizzare "LastChildFill" a vostro 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>

Altri suggerimenti

Utilizzare un DockPanel invece. StackPanel esplicitamente non si preoccupa di spazio visibile, mentre DockPanel fa tutto calcoli sue dimensioni in base allo spazio a disposizione.

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 ragione di mettere tutti i bambini direttamente nella finestra sembra non automatico delle dimensioni molto bene.

Aggiornamento 2:

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

Set di larghezza e altezza di immobili da "auto"

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top