在Xamarin.Forms Shell中,如何以编程方式添加菜单项

时间:2019-06-05 22:18:29

标签: xamarin xamarin.forms

在使用Visual Studio 2017的Xamarin Forms v4.0.0.394984 pre10中,我能够使用MenuItemsCollection MenuItems在Shell的构造函数中以编程方式将MenuItems添加到Shell中。

以下是v4.0.0.394984 pre10中可用的代码(此问题简化为添加单个硬编码菜单项,此处未显示功能LoadView)

public partial class Shell : Xamarin.Forms.Shell
{
    public ICommand cmdLoadView { get; } = new Command(LoadView);

    public Shell()
    {
        InitializeComponent();
        BindingContext = this;

        MenuItem mi = new MenuItem();
        mi.Command = cmdLoadView;
        mi.CommandParameter = "myCommand";
        mi.Text = "sampleName";
        MenuItems.Add(mi);
    }

...
}

在所有后续版本中,此代码无效。 Intellisense指示MenuItems仍然是Shell的一部分,但出现编译错误,提示: 错误CS0103:名称'MenuItems'在当前上下文中不存在。

当我引用为this.MenuItems时,出现编译错误: 错误CS1061:“ Shell”不包含“ MenuItems”的定义,并且找不到包含第一个“ Shell”类型参数的可访问扩展方法“ MenuItems”(您是否缺少using指令或程序集引用?)

当前版本的Xamarin.Forms是否可行?自v4 pre10以来,我已经尝试了每个发行版和预发行版,但没有一个起作用。

非常感谢您的帮助!

1 个答案:

答案 0 :(得分:0)

您需要将MenuItem对象添加到Current.Items实现中的AppShell属性中。示例:

    // factory method to create MenuItem objects
    private static MenuItem CreateMenuItem(string title, ICommand cmd)
    {
        var menuItem = new MenuItem();
        menuItem.Text = title;
        menuItem.Command = cmd;
        return menuItem;
    }

    public AppShell() 
    {
        ...
        // you can place this code in any method in the AppShell class
        Current.Items.Add(CreateMenuItem("AppInfo", new Command(async () =>
                {
                    ShellNavigationState state = Shell.Current.CurrentState;
                    await Shell.Current.Navigation.PushAsync(new AppInfoPage());
                    Shell.Current.FlyoutIsPresented = false;
                })));
         ...
     }