I have a StatusBar with two TextBlock-items:
<StatusBar
x:Name="MainStatusBar"
Grid.Row="1" Grid.ColumnSpan="2" Height="30"
HorizontalContentAlignment="Left" VerticalContentAlignment="Center">
<StatusBarItem HorizontalAlignment="Stretch">
<TextBlock
x:Name="StatusBarTextBlock"
HorizontalAlignment="Stretch"
VerticalAlignment="Center"
TextWrapping="NoWrap"
Text="{Binding StatusBarText, UpdateSourceTrigger=PropertyChanged, Mode=TwoWay}"/>
</StatusBarItem>
<StatusBarItem HorizontalAlignment="Right">
<TextBlock
x:Name="StatusBarTimeBlock"
HorizontalAlignment="Stretch"
VerticalAlignment="Center"
TextWrapping="NoWrap"
MinWidth="75"
Text="{Binding SearchTime, UpdateSourceTrigger=PropertyChanged, Mode=TwoWay}"/>
</StatusBarItem>
</StatusBar>
When StatusBarTextBlock
is to long, StatusBarTimeBlock
will be lesser then 75px
.
Have you any ideas why?
That's because your first StatusBarItem
takes whole place and second StatusBarItem
doesn't fit in StatusBar
Try this code an look what it does
<StatusBar
x:Name="MainStatusBar" Margin="14,462,0,0" HorizontalAlignment="Left" Width="600" VerticalAlignment="Top">
<StatusBarItem MaxWidth="550">
<TextBlock
x:Name="StatusBarTextBlock"
TextWrapping="NoWrap"
Text="{Binding StatusBarText, UpdateSourceTrigger=PropertyChanged, Mode=TwoWay}"/>
</StatusBarItem>
<StatusBarItem HorizontalAlignment="Right" MinWidth="75">
<TextBlock
x:Name="StatusBarTimeBlock"
TextWrapping="NoWrap"
Text="{Binding SearchTime, UpdateSourceTrigger=PropertyChanged, Mode=TwoWay}"/>
</StatusBarItem>
</StatusBar>
You have 600px StatusBar
and Max of 550px first StatusBarItem... So there is only 50px left for second StatusBarItem
so it doesn't fit in your StatusBar. In your code you didn't specity Width
property for your StatusBarTextBlock
so it takes all(if text is long enough).
Now let's try something different...
<StatusBar
x:Name="MainStatusBar" Margin="14,462,0,0" HorizontalAlignment="Left" Width="600" VerticalAlignment="Top">
<StatusBarItem HorizontalAlignment="Right" MinWidth="250">
<TextBlock
x:Name="StatusBarTimeBlock"
TextWrapping="NoWrap"
Text="{Binding SearchTime, UpdateSourceTrigger=PropertyChanged, Mode=TwoWay}"/>
</StatusBarItem>
<StatusBarItem>
<TextBlock
x:Name="StatusBarTextBlock"
TextWrapping="NoWrap"
Text="{Binding StatusBarText, UpdateSourceTrigger=PropertyChanged, Mode=TwoWay}"/>
</StatusBarItem>
</StatusBar>
I switched order of StatusBarItems
and set MinWidth of TimeBlock StatusBarItem
to 250px... Well it's added to the StatusBar
and it no longer ignores MinWidth beause it's first item and it fits into 600px StatusBar
.
So MinWidth
is ignored only if there is not enough space left in StatusBar
.
But if you paid attention to the code I provided You probably noticed something. There is
<StatusBarItem HorizontalAlignment="Right" ... >
And that's not saying that your StatusBarItem
with StatusBarTimeBlock
will be at right... because Items in StatusBar
are always added from left to right no matter what.
So it may be aligned to right, but it's only aligned to next item or end of StatusBar
if there is no other item.
EDIT
My answer was composed to answer your question
When StatusBarTextBlock is too long, StatusBarTimeBlock will be less than 75px. Have you any ideas why?
And it did, but as it seems it's not what you wanted.
As I said items in StatusBar
are always added from left to right no matter what. And That's because it's items are hosted in DockPanel
.
If you know how DockPanel
works you also know, that you can Dock some items to the right.
So you can do this. It happens to be what you want but didn't ask for.
<StatusBar x:Name="MainStatusBar" Margin="14,490,0,0" HorizontalAlignment="Left" Width="600" VerticalAlignment="Top">
<StatusBarItem DockPanel.Dock="Right" HorizontalAlignment="Right" MinWidth="75">
<TextBlock
x:Name="StatusBarTimeBlock"
TextWrapping="NoWrap"
Text="{Binding SearchTime, UpdateSourceTrigger=PropertyChanged, Mode=TwoWay}"/>
</StatusBarItem>
<StatusBarItem>
<TextBlock
x:Name="StatusBarTextBlock"
TextWrapping="NoWrap"
Text="{Binding StatusBarText, UpdateSourceTrigger=PropertyChanged, Mode=TwoWay}"/>
</StatusBarItem>
</StatusBar>
Notice that StatusBarTimeBlock
is "first in XAML" again, but it's docked to right.