【发布时间】:2018-01-21 12:09:00
【问题描述】:
我想在我的项目中添加一个动态状态栏
所以我将 ItemSource 设置为 Binding
<StatusBar ItemsSource="{Binding StatusBarItemsSource}" DockPanel.Dock="Bottom" >
并在我的主视图模型中创建了一个 BindingList
public static BindingList<StatusBarItem> StatusBarItemsSource { get; set; }
在初始化时,我将我的徽标添加到右下角
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);
到目前为止一切顺利,徽标出现在右上角
但是
如果我想在另一个视图中添加另一个 StatusBarItem 以显示左侧视图的总和文本,则徽标也会显示在左侧
主视图模型:
public static void AddItemToStatusBar(Object content, HorizontalAlignment alignment = HorizontalAlignment.Stretch)
{
StatusBarItem statusBarItem = new StatusBarItem
{
HorizontalAlignment = alignment,
Content = content
};
StatusBarItemsSource.Add(statusBarItem);
}
另一个视图模型:
TextBlock someTextBlock = new TextBlock { Text = someString };
MainViewModel.AddItemToStatusBar(someTextBlock , System.Windows.HorizontalAlignment.Left);
然后我在 stackoverflow 上发现可以将网格设置为模板 How do I customize the WPF StatusBar layout?
所以我将这个添加到我的代码中:
<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>
XAML中如何定义列很清楚
<StatusBarItem Grid.Column="3">
<TextBlock>some String</TextBlock>
</StatusBarItem>
但是如何在我的视图模型中做到这一点?
我尝试过类似statusBarItem.Grid.Column = 3 / "3" 或statusBarItem.Grid.SetColumn 但没有成功
我希望你能帮助我,这个小问题并没有太大的程度
【问题讨论】:
标签: .net wpf xaml mvvm statusbar