通过代码添加应用栏 (Windows 8.1, C#)

本文关键字:Windows 代码 添加 应用 | 更新日期: 2023-09-27 18:36:37

在我的方案中,我想为所有Windows 8.1应用程序页面编写一个BasePage。在这个BasePage应该有一个TopAppBar的创造。

其实我有:

public CommandBar TopCommandBar
{
    get
    {
        // Check if a TopAppBar exists
        if (this.TopAppBar != null) return this.TopAppBar.Content as CommandBar;
        var appBar = new AppBar();
        this.TopAppBar = appBar;
        var top = this.TopAppBar.Content as CommandBar;
        if (top == null)
        {
            topCommandBar = new CommandBar();
            this.TopAppBar.Content = topCommandBar;
        }
        return this.TopAppBar.Content as CommandBar;
    }
}

这段代码运行良好。但是稍后在我的BaseClass中,我想添加一个AppBarButton

if (ShowCloseButton)
{
    var closeBtn = new AppBarButton();
    closeBtn.Icon = new SymbolIcon(Symbol.Clear);
    closeBtn.Label = "Close";
    closeBtn.Click += closeBtn_Click;
    this.TopCommandBar.PrimaryCommands.Insert(0, closeBtn);
}

策略行为是,在我单击鼠标右键两次之前,closeBtn不会显示在TopAppBar中。

表示我第一次向右单击时 ->出现TopAppBar但内部没有按钮。

然后我再次单击右键 ->TopAppBar保持打开状态,并且按钮出现其全部功能。

通过代码添加应用栏 (Windows 8.1, C#)

是的,我同意这看起来像一个错误。 我在代码生成的路由上看到了同样的事情。 经过调查,看起来AppBar.IsOpen在右键单击或滑动时被切换为true,但CommandBar.IsOpen仍然是假的。 此修复程序对我有用:

BottomAppBar.Open += (o, args) => { (this.BottomAppBar.Content as CommandBar)。是开放的 = 真;};

您也可以直接将 AppBar 用作命令栏:

    CommandBar appBar = this.BottomAppBar as CommandBar;
    if (appBar == null)
    {
        appBar = new CommandBar();
        this.BottomAppBar = appBar;
    }
    var btnAbout = new AppBarButton() { Icon = new SymbolIcon(Symbol.Help), Label = "About" };
    btnAbout.Click += btnAbout_Click;
    appBar.SecondaryCommands.Add(btnAbout);