在使用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以来,我已经尝试了每个发行版和预发行版,但没有一个起作用。
非常感谢您的帮助!
答案 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;
})));
...
}