c# - Xamarin 表单 NavigationPage.TitleView 需要在所有页面上
问题描述
我有一个 NavigationPage.TitleView ,其中包含带有图像的标签,如果我想在我的所有页面上都将它添加到 MasterDetailPage 中吗?NavigationPage 在 MasterDetailPage 上不可用,如果我将它添加到我的菜单页面,它将不会显示。它将从默认主页显示的唯一页面?
主页.xaml
<MasterDetailPage.Master>
<pages:MenuPage x:Name="menuPage"/>
</MasterDetailPage.Master>
<MasterDetailPage.Detail>
<NavigationPage>
<x:Arguments>
<pages:HomePage />
</x:Arguments>
</NavigationPage>
</MasterDetailPage.Detail>
主页.xaml
<NavigationPage.TitleView>
<StackLayout Orientation="Horizontal" BackgroundColor="#22335c" >
<Label Text="App Name" HorizontalOptions="FillAndExpand" VerticalOptions="CenterAndExpand" BackgroundColor="#22335c" TextColor="White" HorizontalTextAlignment="Center" />
<Image Source="icon.jpg" Aspect="AspectFit" BackgroundColor="#22335c" />
</StackLayout>
</NavigationPage.TitleView>
解决方案
您可以尝试创建自定义渲染器并将其设置为应用程序中所有页面的基类。在此自定义渲染器中,您可以尝试将标签和图像源添加到导航栏。
public class NavigationRenderer : PageRenderer
{
private CustomTitleView _titleView;
public NavigationSearchRenderer(Context context) : base(context)
{
}
protected override void OnElementChanged(ElementChangedEventArgs<Page> e)
{
base.OnElementChanged(e);
var navPage = Element as NavigationSearchPage;
if (navPage == null)
return;
var activity = this.Context as FormsAppCompatActivity;
if (activity == null)
return;
var toolbar = activity.FindViewById<Android.Support.V7.Widget.Toolbar>(Resource.Id.toolbar);
_titleView= new TitleView(Context);
toolbar.AddView(_titleView);
}
}
推荐阅读
- fortran - Fortran90 中的 write 语句会影响结果变量吗?
- node.js - 条带NodeJS不返回响应
- azure - 在 Azure Web App Service 中使用 redis 作为容器
- react-native - React Native Google Sign In 用户数据中的空值
- blazor - 安全存储 Blazor Webassembly 应用程序的应用程序机密
- c# - 找不到类型或命名空间名称“System”(您是否缺少 using 指令或程序集引用?)已修复
- sas - procsurveyselect alloc 选项错误地读取了我的分配数据集?
- scala - 当我传递参数时 Spark-Submit FileNotFoundException
- javascript - 寻找比较数组中对象的最佳 Array 方法
- azure - Azure Function 身份验证:Azure Active Directory:使用安全组包含身份(用户和服务主体)以访问 Function