【问题标题】:How to set custom layout grid position to StatusBarItem programmatically?如何以编程方式将自定义布局网格位置设置为 StatusBarItem?
【发布时间】: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


    【解决方案1】:

    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);
    

    【讨论】:

      猜你喜欢
      • 2018-07-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-07-25
      • 1970-01-01
      • 2016-02-24
      • 2022-01-23
      相关资源
      最近更新 更多