我在StatusBar中有一个TextBlock和几个按钮。按钮实际上是右对齐的( e:实际上包含它们的StatusBarItem)。当窗口水平缩小并且文本换行时,TextBlock将按钮从窗口推出不同程度。
为什么会发生这种情况,如何修复按钮的位置?
<Window x:Class="TextWrapping.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="MainWindow" Height="350" Width="525">
<DockPanel>
<StatusBar DockPanel.Dock="Bottom">
<StatusBarItem>
<TextBlock Name="statusText" TextWrapping="Wrap" Text="when this text wraps, it pushes the buttons off the window" />
</StatusBarItem>
<StatusBarItem HorizontalAlignment="Right">
<StackPanel Orientation="Horizontal">
<Button>one</Button>
<Button>two</Button>
</StackPanel>
</StatusBarItem>
</StatusBar>
<TextBlock Text="shink this window horizontally" />
</DockPanel>
</Window>
答案 0 :(得分:1)
您可以看到此blog post以获取更多信息,但基本上StatusBar正在使用DockPanel来呈现它的项目。因此,对于上面的代码,statusText左侧停靠,按钮填充剩余空间(但在该区域内水平对齐)。
因此,当您缩小尺寸时,TextBlock将始终占用所需的空间(允许按钮大小为零)。当文本被包装时,按钮会返回更多的空间,因为TextBlock不需要所有的水平空间。
要解决此问题,您可以将代码更改为:
<DockPanel>
<StatusBar DockPanel.Dock="Bottom">
<StatusBarItem DockPanel.Dock="Right">
<StackPanel Orientation="Horizontal">
<Button>one</Button>
<Button>two</Button>
</StackPanel>
</StatusBarItem>
<StatusBarItem>
<TextBlock Name="statusText" TextWrapping="Wrap" Text="when this text wraps, it pushes the buttons off the window" />
</StatusBarItem>
</StatusBar>
<TextBlock Text="shink this window horizontally" />
</DockPanel>
或者您可以使用博客文章中显示的技巧,用网格替换DockPanel。