Xamarin.forms 如何更改Navigastion';Xamarin表单中的页面箭头?

Xamarin.forms 如何更改Navigastion';Xamarin表单中的页面箭头?,xamarin.forms,cross-platform,Xamarin.forms,Cross Platform,我正在使用xamarin表单(multiplatform)创建一个应用程序,我正在使用一个导航页面,但我想更改箭头(),当您使用xamarin表单时,建议使用公共组件,并尽量少使用自定义渲染器 现在,根据您的需求,您需要创建自定义导航栏 这就是你可以做到的 创建基本内容页 在您的基本页面内创建一个控件模板,您可以按照以下步骤操作 在控件模板内部,使用网格视图将标签与文本绑定(背面)一起放置,也可以将标签放置在中间以再次显示页面标题。您可以使用模板绑定,当您浏览链接时,您会知道该模板绑定 现在用b

我正在使用xamarin表单(multiplatform)创建一个应用程序,我正在使用一个导航页面,但我想更改箭头(),当您使用xamarin表单时,建议使用公共组件,并尽量少使用自定义渲染器

现在,根据您的需求,您需要创建自定义导航栏 这就是你可以做到的

  • 创建基本内容页
  • 在您的基本页面内创建一个控件模板,您可以按照以下步骤操作
  • 在控件模板内部,使用网格视图将标签与文本绑定(背面)一起放置,也可以将标签放置在中间以再次显示页面标题。您可以使用模板绑定,当您浏览链接时,您会知道该模板绑定
  • 现在用basecontentpage继承主页
  • 在主页内添加控件模板
  • 关闭主页的导航栏
  • 完成后,这将使您能够在导航栏中添加更多的内容,如图像或工具栏


    另外,要动态处理后退按钮,如果导航斯塔克的0 u可以显示汉堡包图标,或者如果超过0 u可以使用IsVisible True/False显示标签,则可以从导航斯塔克中检查计数。您可以使用自定义渲染器删除导航图标并将其设置为文本。但是,在执行此操作时,需要捕获文本的点击并模拟背部事件

    创建接口:

    public class CustomNavigationPage : NavigationPage
    {
        public CustomNavigationPage(Page startupPage) : base(startupPage)
        {
    
        }
    }
    
    安卓系统的实现:

      [assembly: ExportRenderer(typeof(CustomNavigationPage), 
    typeof(NavigationPageRenderer_Droid))]
    namespace NavigationPageDemo.Droid
    {
    public class NavigationPageRenderer_Droid : NavigationPageRenderer
    {
        public Android.Support.V7.Widget.Toolbar toolbar;
        public Activity context;
        public NavigationPageRenderer_Droid(Context context) : base(context)
        {
    
        }
        protected override Task<bool> OnPushAsync(Page view, bool animated)
        {
            var retVal = base.OnPushAsync(view, animated);
    
            context = (Activity)Forms.Context;
            toolbar = context.FindViewById<Android.Support.V7.Widget.Toolbar>(Droid.Resource.Id.toolbar);
    
            if (toolbar != null)
            {
                //if (toolbar.NavigationIcon != null)
                //{
                //toolbar.NavigationIcon = Android.Support.V7.Content.Res.AppCompatResources.GetDrawable(context, Resource.Drawable.back);
                //toolbar.NavigationIcon = null;
    
                toolbar.NavigationIcon = null;
                toolbar.Title = "back";
                toolbar.SetOnClickListener(new OnClick());
            
    
    
                //}
            }
    
            return retVal;
        }
    
        protected override Task<bool> OnPopViewAsync(Page page, bool animated)
        {
            return base.OnPopViewAsync(page, animated);
        }
    
    }
    public class OnClick : Java.Lang.Object, IOnClickListener
    {
        void IOnClickListener.OnClick(Android.Views.View v)
        {
            App.Current.MainPage.Navigation.PopAsync();
        }
    
      
    }
    
    [程序集:ExportRenderer(typeof(CustomNavigationPage)),
    类型(NavigationPageRenderer\u Droid))]
    命名空间NavigationPageDemo.Droid
    {
    公共类NavigationPageRenderer\u Droid:NavigationPageRenderer
    {
    公共Android.Support.V7.Widget.Toolbar工具栏;
    公共活动语境;
    公共导航PageRenderer\u Droid(上下文):基础(上下文)
    {
    }
    受保护的覆盖任务OnPushAsync(页面视图,布尔动画)
    {
    var retVal=base.OnPushAsync(视图,动画);
    context=(活动)Forms.context;
    
    toolbar=context.findviewbyd

    看看这里:太好了!!!谢谢你,它真的帮了大忙