WPF中StatusBarItem类的作用是什么?

15

StatusBarItem类应该如何使用?StatusBar的每个元素都需要用它来包装吗?

我不太理解StatusBarItem如何影响StatusBar的布局。似乎我可以在StatusBarItem上使用HorizontalAlignment,但是如果我直接将元素放在StatusBar中,则不能使用HorizontalAlignment

<StatusBar>
    <TextBlock HorizontalAlignment="Right" Text="Not right" />
    <StatusBarItem HorizontalAlignment="Center">
        <TextBlock Text="Center" />
    </StatusBarItem>
</StatusBar>

如果您将 Separator 包装在 StatusBarItem 中,Separator 会变为水平方向。而如果直接将 Separator 放置在 StatusBar 中就会默认垂直方向,不需要 StatusBarItem 包装。


我在使用ToolBar时遇到了类似的问题,涉及到Separator。https://dev59.com/2UjSa4cB1Zd3GeqPJOGu - kenwarner
1
这不是一个答案,而是一个ItemsControl,这意味着您可以将其绑定到对象集合并使用DataTemplates来确定在状态栏中显示这些项的方式。可能它在StatusBar中提供了比标准ItemsControl更好的行为。 - user1228
1个回答

18

StatusBar 是一个 ItemsControl。所有的 ItemsControl 都有一个容器类。对于 ListBox,它是 ListBoxItem。对于 StatusBar,它是 StatusBarItem。如果您没有显式地将项目包装在 StatusBarItem 中,系统会自动为您进行包装。

如果您需要设置 ItemsControl 的容器属性,可以使用 ItemContainerStyle 属性:

<StatusBar>
    <TextBlock>One</TextBlock>
    <TextBlock>Two</TextBlock>
    <TextBlock>Three</TextBlock>
    <StatusBar.ItemContainerStyle>
        <Style TargetType="StatusBarItem">
            <Setter Property="HorizontalAlignment" Value="Right"/>
        </Style>
    </StatusBar.ItemContainerStyle>
</StatusBar>

最后,需要注意的是StatusBar默认使用DockPanel来布局其子元素。当你进行复杂的布局时,这可能会让人感到沮丧。请参阅我的博客文章此处了解如何将其替换为Grid


谢谢分享博客文章!以下代码段对我很有用:<StatusBar.ItemsPanel> <ItemsPanelTemplate> <StackPanel Orientation="Horizontal"/> </ItemsPanelTemplate> </StatusBar.ItemsPanel> - SliverNinja - MSFT

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接