DockPanel 内の項目を WPF の利用可能なすべてのスペースに合わせて拡張するにはどうすればよいですか?
-
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 属性を削除します。
「自動」に幅と高さのプロパティを設定します