我有三个小组:
第一个位于顶部,仅保留一些按钮。它将会有很多按钮。
第二个应该直接在它下面,它有一个画布应该占据窗口的大部分。
第三个是“某种”状态栏,它会保存一些标签和数据。它也只会添加很多标签。
我不想硬编码任何尺寸。所以我将第一个面板对接到父母的顶部。第二个面板(画布)也是如此。我也把它对接到顶部。第三个面板停靠在底部。
我无法使画布(第二个面板)填充第一个面板和第三个面板之间的整个空间。怎么做?
<Window x:Class="MyProject.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:local="clr-namespace:MyProject"
mc:Ignorable="d"
Title="MainWindow" Height="700" Width="800">
<DockPanel LastChildFill="False">
<StackPanel DockPanel.Dock="Top">
<GroupBox x:Name="grBoxSettings" Header="Settings" HorizontalAlignment="Stretch" VerticalAlignment="Top" Height="90" Margin="5,0,5,0">
<WrapPanel x:Name="wrapPanelButtons" HorizontalAlignment="Left" VerticalAlignment="Top" Width="110">
<Button x:Name="btnTest" Content="Test" Margin="5,0,0,0" HorizontalAlignment="Center" VerticalAlignment="Top" Width="100"/>
</WrapPanel>
</GroupBox>
</StackPanel>
<Canvas HorizontalAlignment="Stretch" VerticalAlignment="Stretch" DockPanel.Dock="Top"/>
<DockPanel LastChildFill="False" DockPanel.Dock="Bottom">
<GroupBox Header="Version" DockPanel.Dock="Right">
<Label x:Name="lblVersion"/>
</GroupBox>
</DockPanel>
</DockPanel>
</Window>
答案 0 :(得分:4)
使用Grid
与RowDefinitions
合并Height=
第一名:Auto
第二名:1*
第三名:Auto
,
或者只需在DockPanel
:
<DockPanel LastChildFill="True">
<StackPanel DockPanel.Dock="Top">
<GroupBox x:Name="grBoxSettings" Header="Settings" HorizontalAlignment="Stretch" VerticalAlignment="Top" Height="90" Margin="5,0,5,0">
<WrapPanel x:Name="wrapPanelButtons" HorizontalAlignment="Left" VerticalAlignment="Top" Width="110">
<Button x:Name="btnTest" Content="Test" Margin="5,0,0,0" HorizontalAlignment="Center" VerticalAlignment="Top" Width="100"/>
</WrapPanel>
</GroupBox>
</StackPanel>
<DockPanel LastChildFill="False" DockPanel.Dock="Bottom">
<GroupBox Header="Version" DockPanel.Dock="Right">
<Label x:Name="lblVersion"/>
</GroupBox>
</DockPanel>
<Canvas HorizontalAlignment="Stretch" VerticalAlignment="Stretch" />
</DockPanel>
另外,这里有Dock
Property的一些文档:
如果将LastChildFill属性设置为true(默认设置),则DockPanel的最后一个子元素始终填充剩余空间,而不管您在最后一个子元素上设置的任何其他停靠值。要将子项停靠在另一个方向,必须将LastChildFill属性设置为false,并且还必须在最后一个子元素上设置显式停靠方向。