如何在 MasterDetailPage 中自定义箭头图标、页面图标和页面标题 - Xamarin.Forms

How to customize arrow icon, page icon and page title in MasterDetailPage - Xamarin.Forms

我在 Visual Studio 2015 年创建了一个新的空白应用程序(Xamarin.Forms 便携式)项目并修改了 App.cs 以获得 "hamburger menu":

public class App : Application
{
    public App()
    {
        var masterPage = new ContentPage()
        {
            Content = new Label { Text = "Hello from Master!"},
            Title = "Master Page"
        };

        var detailPage = new ContentPage()
        {
            Content = new Label { Text = "Hello from Detail!" },
            Title = "Detail Page"
        };

        var mainPage = new MasterDetailPage()
        {
            Master = masterPage,
            Detail = detailPage,
            Title = "Main Page"
        };

        // The root page of your application
        MainPage = mainPage;
    }
    . . .
}

一切正常,但我如何自定义这四个东西:

1) Hide / change Arrow

2) Hide / change Icon

3) Hide / change Title text

4) Hide whole toolbar

  1. 如果您在 NavigationPage 中使用 DetailPage,您可以将箭头更改为汉堡图标:

    Detail = new NavigationPage(detailPage);
    
  2. 要更改图标,只需更改项目文件:

    • YourProject/Resources/drawable/icon.png
    • YourProject/Resources/drawable-hdpi/icon.png
    • YourProject/Resources/drawable-xhdpi/icon.png
    • YourProject/Resources/drawable-xxhdpi/icon.png

    或在您的 MasterDetailPage 上将 Icon 属性 设置为另一个资源。

    如果你想隐藏图标 - 它只适用于 Android。可以用自定义渲染器解决(http://developer.xamarin.com/guides/cross-platform/xamarin-forms/custom-renderer/):

    public class CustomNavigationRenderer : NavigationRenderer
    {
        protected override void OnElementChanged(ElementChangedEventArgs<NavigationPage> e)
        {
            base.OnElementChanged (e);
    
            var actionBar = ((Activity)Context).ActionBar;
            actionBar.SetIcon (Resource.Color.transparent);
        }
    }
    

    编辑: 也可以在 MainActivity.cs:

    中完成
    ActionBar.SetIcon (new ColorDrawable(Resources.GetColor (Android.Resource.Color.Transparent)));
    
  3. 只需在 Page 上使用 Title 属性。

  4. SetHasNavigationBar(page, false);