我如何更改 Xamarin Forms 中 Navigastion 的页面箭头?
How could I change the Navigastion's page arrow in Xamarin Forms?
我正在使用 xamarin Forms(多平台)创建应用程序,我正在使用导航页面,但我想将 arrow(“<-”)更改为文本(“返回”)
你知道我该怎么做吗?
谢谢
(我将在 Android 应用程序中使用它,但我正在使用 Xamarin 表单创建应用程序)
当您使用 xamarin 表单时,建议使用通用组件并尽量少使用自定义渲染器。
现在根据您的要求创建自定义导航栏
所以这里是你如何做到的。
- 创建基本内容页面
- 在您的基本页面中创建一个控件模板,您可以按照此操作link
- 在您的控件模板中使用网格视图放置带有文本绑定的标签(返回),您也可以在中心放置一个标签以再次显示页面标题您可以使用您会知道的模板绑定当你通过 link
- 现在用您的 basecontentpage 页面继承您的主页
- 在主页中添加控件模板
- 关闭主页的导航栏
大功告成,这会让您更有能力在导航栏中添加更多内容,例如图像或工具栏
还可以动态处理您的后退按钮,您可以检查导航堆栈的计数,如果它是 0,您可以显示 Humburger 图标,或者如果它大于 0,您可以使用 IsVisible 显示您的标签 True/False
您可以使用自定义渲染器删除导航图标并用文本设置它。但是,当你这样做时,你需要捕获文本的点击并模拟返回事件。
创建接口:
public class CustomNavigationPage : NavigationPage
{
public CustomNavigationPage(Page startupPage) : base(startupPage)
{
}
}
执行Android:
[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();
}
}
在自定义呈现器中,使用 OnClickListener
捕获对文本的点击。
我正在使用 xamarin Forms(多平台)创建应用程序,我正在使用导航页面,但我想将 arrow(“<-”)更改为文本(“返回”)
你知道我该怎么做吗? 谢谢
(我将在 Android 应用程序中使用它,但我正在使用 Xamarin 表单创建应用程序)
当您使用 xamarin 表单时,建议使用通用组件并尽量少使用自定义渲染器。
现在根据您的要求创建自定义导航栏 所以这里是你如何做到的。
- 创建基本内容页面
- 在您的基本页面中创建一个控件模板,您可以按照此操作link
- 在您的控件模板中使用网格视图放置带有文本绑定的标签(返回),您也可以在中心放置一个标签以再次显示页面标题您可以使用您会知道的模板绑定当你通过 link
- 现在用您的 basecontentpage 页面继承您的主页
- 在主页中添加控件模板
- 关闭主页的导航栏
大功告成,这会让您更有能力在导航栏中添加更多内容,例如图像或工具栏
还可以动态处理您的后退按钮,您可以检查导航堆栈的计数,如果它是 0,您可以显示 Humburger 图标,或者如果它大于 0,您可以使用 IsVisible 显示您的标签 True/False
您可以使用自定义渲染器删除导航图标并用文本设置它。但是,当你这样做时,你需要捕获文本的点击并模拟返回事件。
创建接口:
public class CustomNavigationPage : NavigationPage
{
public CustomNavigationPage(Page startupPage) : base(startupPage)
{
}
}
执行Android:
[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();
}
}
在自定义呈现器中,使用 OnClickListener
捕获对文本的点击。