DockPanel 内の項目を WPF の利用可能なすべてのスペースに合わせて拡張するにはどうすればよいですか?

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

  •  13-09-2019
  •  | 
  •  

質問

私は持っています StackPanel を含む StackPanel とその他のアイテム。最初 StackPanel は垂直方向、内側は水平方向です。内側のものには、 TreeView そして ListView, ウィンドウで設定したウィンドウの幅に合わせて拡大し、ユーザーが変更できるようにしたいと考えています。アウターも欲しいです StackPanel 窓の高さに合わせて。どうすればいいでしょうか?

編集:を使用するように変換しました DockPanel, を設定しました。 DockPanel.Dock 各要素のプロパティが正しく設定されており、無効になっている LastChildFill どちらのドックパネルでも、レイアウトはまだ伸びていません。

コード:

<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>
役に立ちましたか?

解決

これはそれを行う必要があります - ツリービューとリストビューは、メインビュー50/50を共有するように、私はそれを設定します。あなたはそれをしたくない場合は、「自動」と「*」か何かに設定します。あなたの利点に "LastChildFill" を使用してください!

<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>

他のヒント

代わりに DockPanel を使用してください。StackPanel は可視スペースを明示的に考慮しませんが、DockPanel は利用可能なスペースに基づいてすべてのサイズ計算を行います。

アップデート:

さらに、私の経験では、ウィンドウの本体をビューに配置し、ビューのみをウィンドウ内に置くと、自動サイズのエクスペリエンスが向上します。

何らかの理由で、すべての子を Window に直接配置すると、自動サイズ設定がうまく機能しないようです。

アップデート 2:

未使用のスペースを拡張(埋める)したい要素から明示的な DockPanel.Dock 属性を削除します。

「自動」に幅と高さのプロパティを設定します
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top