WPF:DockPanel.Dock = "Bottom" 没有按预期工作
WPF: DockPanel.Dock = "Bottom" doesn't work as expected
这涉及 WPF。
作为一个简单的测试,我有一个包含 3 列的网格,第三列包含一个 Dock 面板。反过来,此 Dockpanel 包含一个 TextBlock 和一个 StatusBar,StatusBar 具有(附加)属性 Dockpanel.Dock = "Bottom".
所以我希望 StatusBar 位于第 3 列的底部,TextBlock - 上面写着 "I am TextBlock 3" - 在它的顶部(在同一列中)。
然而,令我惊讶的是,StatusBar 出现在 TextBlock 的右侧!
这是相关的 xaml 代码(我没有制作隐藏代码):
<Window x:Class="Testing.TestWindow"
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:Testing"
mc:Ignorable="d"
Title="TestWindow" Height="500" Width="1000">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*" MinWidth="180" MaxWidth="540" />
<ColumnDefinition Width="*" />
<ColumnDefinition Width="*" />
</Grid.ColumnDefinitions>
<TextBlock Grid.Column="0">I am Textblock 1</TextBlock>
<TextBlock Grid.Column="1">I am Textblock 2</TextBlock>
<DockPanel Grid.Column="2">
<TextBlock>I am Textblock 3</TextBlock>
<StatusBar DockPanel.Dock="Bottom">I am the statusbar</StatusBar>
</DockPanel>
</Grid>
</Window>
有人知道我做错了什么吗?
谢谢。
更新您的 DockPanel
以获得 LastChildFile="False"
<DockPanel Grid.Column="2" LastChildFill="false">
默认情况下 属性 为真,并且由于 StatusBar
是 DockPanel
的 LastChild
,您会看到您遇到的行为。
LastChildFill 来自文档的信息:
true if the last child element stretches to fill the remaining space;
otherwise false. The default value is true.
这涉及 WPF。
作为一个简单的测试,我有一个包含 3 列的网格,第三列包含一个 Dock 面板。反过来,此 Dockpanel 包含一个 TextBlock 和一个 StatusBar,StatusBar 具有(附加)属性 Dockpanel.Dock = "Bottom".
所以我希望 StatusBar 位于第 3 列的底部,TextBlock - 上面写着 "I am TextBlock 3" - 在它的顶部(在同一列中)。
然而,令我惊讶的是,StatusBar 出现在 TextBlock 的右侧!
这是相关的 xaml 代码(我没有制作隐藏代码):
<Window x:Class="Testing.TestWindow"
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:Testing"
mc:Ignorable="d"
Title="TestWindow" Height="500" Width="1000">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*" MinWidth="180" MaxWidth="540" />
<ColumnDefinition Width="*" />
<ColumnDefinition Width="*" />
</Grid.ColumnDefinitions>
<TextBlock Grid.Column="0">I am Textblock 1</TextBlock>
<TextBlock Grid.Column="1">I am Textblock 2</TextBlock>
<DockPanel Grid.Column="2">
<TextBlock>I am Textblock 3</TextBlock>
<StatusBar DockPanel.Dock="Bottom">I am the statusbar</StatusBar>
</DockPanel>
</Grid>
</Window>
有人知道我做错了什么吗? 谢谢。
更新您的 DockPanel
以获得 LastChildFile="False"
<DockPanel Grid.Column="2" LastChildFill="false">
默认情况下 属性 为真,并且由于 StatusBar
是 DockPanel
的 LastChild
,您会看到您遇到的行为。
LastChildFill 来自文档的信息:
true if the last child element stretches to fill the remaining space; otherwise false. The default value is true.