这与WPF有关。
作为一个简单的测试,我有一个有3列的网格,第三列包含Dock面板。反过来,这个Dockpanel包含一个TextBlock和一个StatusBar,StatusBar具有(附加)属性Dockpanel.Dock =" Bottom"。
所以我希望StatusBar位于第3列的底部,使用TextBlock - 表示"我是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>
任何人都知道我做错了什么? 谢谢。
答案 0 :(得分:6)
将DockPanel
更新为LastChildFile="False"
<DockPanel Grid.Column="2" LastChildFill="false">
默认情况下该属性为true,由于StatusBar
是LastChild
的{{1}},因此您会看到您遇到的行为。
LastChildFill 信息:
如果最后一个子元素伸展以填充剩余空间,则为true; 否则是假的。默认值为true。