Wie macht man Elemente in einem DockPanel erweitern den gesamten verfügbaren Platz in WPF passen?

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

  •  13-09-2019
  •  | 
  •  

Frage

Ich habe eine StackPanel eine StackPanel und einige andere Teile enthält. Der erste StackPanel hat eine vertikale Ausrichtung, die die innere hat eine horizontale Ausrichtung. Die innere hat eine TreeView und ein ListView, würde Ich mag sie die Breite des Fensters zu erweitern und passen, die ich durch das Fenster gesetzt und ermöglicht es dem Benutzer zu ändern. Ich möchte auch die äußere StackPanel die Höhe des Fensters passen. Wie mache ich das?

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

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>
War es hilfreich?

Lösung

Das sollte es tun - ich es so einrichten, dass die TreeView und die Listview die Hauptansicht 50/50 geteilt; wenn Sie nicht wollen, dass, setzen Sie sich auf ‚Auto‘ und ‚*‘ oder so etwas. Verwenden 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>

Andere Tipps

Verwenden Sie stattdessen eine DockPanel. Stackpanel ausdrücklich nicht über sichtbaren Raum kümmern, während DockPanel all seine Größe Berechnung tut basierend auf dem verfügbaren Raum.

Update:

Darüber hinaus in meiner Erfahrung, in eine Ansicht des Körpers des Fensters setzen, und mit nur den Blick in das Fenster sorgt für eine bessere Auto Size Erfahrung.

Aus irgendeinem Grund alle Kinder direkt in die Fenster setzen scheint nicht automatisch Größe sehr gut.

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.

Setzen Sie Breite und Höhe Eigenschaften auf "auto"

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top