I want a dynamic status bar in my project
So I set the ItemSource to Binding
<StatusBar ItemsSource="{Binding StatusBarItemsSource}" DockPanel.Dock="Bottom" >
And created a BindingList in my main view model
public static BindingList<StatusBarItem> StatusBarItemsSource { get; set; }
On the initialization I add my logo to the bottom right
StatusBarItem logo = new StatusBarItem
{
HorizontalAlignment = HorizontalAlignment.Right,
Content = new Image
{
Source = new BitmapImage(new Uri("Logo.ico", UriKind.Relative)),
Width = 16,
Height = 16
}
};
StatusBarItemsSource.Add(logo);
So far so good, the logo appears in the right corner
BUT
If I want to add another StatusBarItem in another view to display a sum text for the view on the left, the logo shows up on the left too
MainViewModel:
public static void AddItemToStatusBar(Object content, HorizontalAlignment alignment = HorizontalAlignment.Stretch)
{
StatusBarItem statusBarItem = new StatusBarItem
{
HorizontalAlignment = alignment,
Content = content
};
StatusBarItemsSource.Add(statusBarItem);
}
Another ViewModel:
TextBlock someTextBlock = new TextBlock { Text = someString };
MainViewModel.AddItemToStatusBar(someTextBlock , System.Windows.HorizontalAlignment.Left);
Then I found here on stackoverflow the possibility to set a grid as a template How do I customize the WPF StatusBar layout?
So i added this to my code:
<StatusBar ItemsSource="{Binding StatusBarItemsSource}" DockPanel.Dock="Bottom" >
<StatusBar.ItemsPanel>
<ItemsPanelTemplate>
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="100" />
<ColumnDefinition Width="Auto" />
<ColumnDefinition Width="*" />
<ColumnDefinition Width="Auto" />
<ColumnDefinition Width="100" />
</Grid.ColumnDefinitions>
</Grid>
</ItemsPanelTemplate>
</StatusBar.ItemsPanel>
</StatusBar>
How to define the column in XAML is clear
<StatusBarItem Grid.Column="3">
<TextBlock>some String</TextBlock>
</StatusBarItem>
But how to do this in my view model?
i have tried something like statusBarItem.Grid.Column = 3 / "3"
or statusBarItem.Grid.SetColumn
but without success
I hope you can help me and this little question has not taken too large extent
Grid.SetColumn
was not that bad, but I used it wrong
That's how it works now:
StatusBarItem logo = new StatusBarItem
{
Content = new Image
{
Source = new BitmapImage(new Uri("logo.ico", UriKind.Relative)),
Width = 16,
Height = 16
}
};
Grid.SetColumn(logo, 2);
StatusBarItemsSource.Add(logo);