我想在项目中使用动态状态栏
所以我将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);
到目前为止,徽标出现在右上角
BUT
如果我想在另一个视图中添加另一个StatusBarItem以在左侧显示视图的总和文本,则徽标也会显示在左侧
MainViewModel:
public static void AddItemToStatusBar(Object content, HorizontalAlignment alignment = HorizontalAlignment.Stretch)
{
StatusBarItem statusBarItem = new StatusBarItem
{
HorizontalAlignment = alignment,
Content = content
};
StatusBarItemsSource.Add(statusBarItem);
}
另一个ViewModel:
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
但未成功的内容
我希望你能帮助我,这个小问题没有太大的影响
答案 0 :(得分:0)
Grid.SetColumn
并没有那么糟糕,但我用错了
现在它是如何运作的:
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);