我有Xamarin.Forms项目。我在NavigationPage里面有MasterDetailPage。我设置了MasterDetailPage的图标属性,以便将图标设置为导航栏上的左上角位置。但它不起作用。
public partial class App : Application
{
public App()
{
InitializeComponent();
var masterDetailpage = new MasterDetailPage {
Icon = "menuIcon.png",
Master = new Page { Title = "Sample"},
Detail = new Page()
};
MainPage = new NavigationPage(masterDetailpage);
}
}
这永远不会奏效。如果我将NavigationPage作为MasterDetailPage的Detail属性,并在Master上设置图标。有用。但是在NavigationPage中包含MasterDetailPage非常重要,反之亦然。
解决方案是设置用于Icon
的Page
的Master
属性。
var masterDetailpage = new MasterDetailPage {
Master = new Page { Title = "Sample", Icon = "menuIcon.png"},
Detail = new NavigationPage(new Page())
};
这假设您的iOS项目中有一个名为menuIcon.png
的Resources文件夹下的png,它是您想要的汉堡包图标。您还需要在NavigationPage
周围使用Detail
,因为Icon
显示在导航栏区域。
如果您将母版页包装在导航页面中,请将该图标放在导航页面上。
这对我有用:
public partial class App : Application
{
public App()
{
InitializeComponent();
var masterDetailpage = new MasterDetailPage {
Icon = "menuIcon.png",
Master = new Page { Title = "Sample"},
Detail = new Page()
};
MainPage = new NavigationPage(masterDetailpage) { Title = "Sample", Icon = "menuIcon.png" };
}
}
如果它可以帮助某人你可以在设置MainPage
之前设置菜单的标题,就像我在下面的示例代码中所做的那样:
var master = new MasterPage();
master.Master.Icon = "my_icon.png";
master.Master.Title = AppResources.Menu; // To get the value from resource files
MainPage = master;
MasterPage
继承自MasterDetailsPage
由于Xamarin的奇怪错误,我无法直接设置MasterPage
的构造函数的值。
我认为你必须添加你的AddDelegate
一个常见的修复
namespace myApp.iOS
{
[Register("AppDelegate")]
public partial class AppDelegate :
global::Xamarin.Forms.Platform.iOS.FormsApplicationDelegate
{
UIWindow window;
public override bool FinishedLaunching(UIApplication app, NSDictionary options)
{
global::Xamarin.Forms.Forms.Init();
// fix for iOS
window = new UIWindow(UIScreen.MainScreen.Bounds);
window.RootViewController = App.GetMainPage().CreateViewController();
window.MakeKeyAndVisible();
LoadApplication(new App());
return base.FinishedLaunching(app, options);
}
}
}
在App.xaml.cs
的PCL项目中,您必须添加
public App()
{
// The root page of your application
MainPage = GetMainPage();
}
public static Page GetMainPage()
{
return new RootPage();
}