views:

338

answers:

1

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.

+3  A: 

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.

HTH,
Kent

Kent Boogaart