如何在运行时编辑汉堡菜单项列表?

How to edit Hamburger Menu items list at runtime?

我在我的 UWP 应用程序中使用模板 10。但是我需要根据我的条件 Enable/Disable 汉堡包按钮。 我最初将 IsFullScreen 属性 设置为 true 是因为我想在用户登录应用程序后显示汉堡菜单。 因为 Shell 页面最初是加载的,然后在运行时加载,如果我创建它的新实例,那么应用程序是 运行 全屏显示,我看不到菜单。 提前感谢您的帮助。

正在访问 Shell 页面实例

您首先需要能够访问 Shell 页面实例。您可以通过两种方式执行此操作。如果你知道,总会有一个实例,你可以像这样添加一个 static 属性 指向它:

public static Shell Instance { get; private set; }

并在构造函数中设置实例:

public Shell()
{
    //InitializeComponent(), etc....
    Instance = this;
}

现在,您可以从任何地方使用 Shell.Instance 访问它。如果理论上可以有多个 windows,则可以使用 Windows.Current.Content 访问当前 Shell 的实例。如果您使用 Template 10 汉堡包模板,您将执行:

var dialog = (ModalDialog)Window.Current.Content;
var shell = (Shell)dialog.Content;

Disabling/enabling

HamburgerMenu 控件中的项目属于 HamburgerButtonInfo 类型,并且具有可用于 enabling/disabling 的 IsEnabled 属性。如果你在HamburgerMenu控件中添加一个x:Name="Menu",你就可以写一个这样的启用方法:

public void SetMenuEnabled(bool enable)
{
   foreach (var primaryButton in Menu.PrimaryButtons)
   {
      primaryButton.IsEnabled = false;
   }
   foreach (var secondaryButton in Menu.SecondaryButtons)
   {
      secondaryButton.IsEnabled = false;
   }
}

您可以将此方法放在 Shell 页面中,并通过 Shell.Instance.SetMenuEnabled(false) 禁用和 Shell.Instance.SetMenuEnabled(true) 启用所有按钮。