TextBlock文本包装推送其他组件

时间:2011-05-03 17:59:44

标签: wpf

我在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>

1 个答案:

答案 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。