Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

What is the point of the StatusBarItem class in WPF?

How is the StatusBarItem class supposed to be used? Is every element in a StatusBar's content supposed to be wrapped with it?

I don't really understand how StatusBarItem affects the StatusBar layout. It seems like I can use HorizontalAlignment on a StatusBarItem, but not when I put the element in the StatusBar directly:

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

Also if you wrap a Separator in a StatusBarItem the Separator changes to horizontal. Separators default to vertical when put in the StatusBar directly without a StatusBarItem wrapper.

like image 418
sourcenouveau Avatar asked Jan 20 '10 16:01

sourcenouveau


1 Answers

A StatusBar is an ItemsControl. All ItemsControls have a container class. For ListBoxes, it's ListBoxItem. For StatusBar, it's StatusBarItem. If you don't explicitly wrap your item in a StatusBarItem, it will be implicitly wrapped in one for you.

If you need to set properties of an ItemsControl's containers, you can use the ItemContainerStyle property:

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

Finally, note that the StatusBar uses a DockPanel by default to lay out its children. This can be frustrating when you're doing intricate layouts. See my blog post here on how to swap it out for a Grid.

like image 65
Kent Boogaart Avatar answered Oct 12 '22 00:10

Kent Boogaart