首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何以编程方式将自定义布局网格位置设置为StatusBarItem?

如何以编程方式将自定义布局网格位置设置为StatusBarItem?
EN

Stack Overflow用户
提问于 2018-01-21 12:09:00
回答 1查看 213关注 0票数 0

我希望在我的项目中有一个动态状态栏

因此,我将ItemSource设置为绑定

代码语言:javascript
复制
<StatusBar ItemsSource="{Binding StatusBarItemsSource}" DockPanel.Dock="Bottom" >

并在我的主视图模型中创建了一个BindingList

代码语言:javascript
复制
public static BindingList<StatusBarItem> StatusBarItemsSource { get; set; }

在初始化时,我将我的徽标添加到右下角

代码语言:javascript
复制
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以显示左侧视图的和文本,则徽标也会显示在左侧。

MainViewModel:

代码语言:javascript
复制
public static void AddItemToStatusBar(Object content, HorizontalAlignment alignment = HorizontalAlignment.Stretch)
{
    StatusBarItem statusBarItem = new StatusBarItem
    {
        HorizontalAlignment = alignment,
        Content = content
    };
    StatusBarItemsSource.Add(statusBarItem);
}

另一个ViewModel:

代码语言:javascript
复制
TextBlock someTextBlock = new TextBlock { Text = someString };
MainViewModel.AddItemToStatusBar(someTextBlock , System.Windows.HorizontalAlignment.Left);

然后我在堆栈溢出上发现了将网格设置为模板How do I customize the WPF StatusBar layout?的可能性。

所以我把这个添加到我的代码中:

代码语言:javascript
复制
<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中定义列是很清楚的。

代码语言:javascript
复制
<StatusBarItem Grid.Column="3">
    <TextBlock>some String</TextBlock>
</StatusBarItem>

,但是如何在我的视图模型中做到这一点呢?

我尝试过类似statusBarItem.Grid.Column = 3 / "3"statusBarItem.Grid.SetColumn之类的东西,但没有成功。

我希望你能帮助我,这个小小的问题还没有得到很大的重视。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-01-25 16:41:12

Grid.SetColumn没那么坏,但我用错了

它现在就是这样运作的:

代码语言:javascript
复制
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);
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48366598

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档