我想在Android和iOS中自定义工具栏。为此,我扔掉了旧的渲染器并为 ToolbarHandler 附加了一个映射器:
在 Android 中,代码已到达并执行(在 Platforms.Android.MainApplicatinon.cs 中):
[Application]
public class MainApplication : MauiApplication
{
public MainApplication(IntPtr handle, JniHandleOwnership ownership)
: base(handle, ownership)
{
}
protected override MauiApp CreateMauiApp() {
ToolbarHandler.Mapper.AppendToMapping("CustomToolbarMapper", (handler, toolbar) =>
{
var materialToolbar = handler.PlatformView;
materialToolbar.ContentInsetStartWithNavigation = 0;
materialToolbar.TitleCentered = true;
});
return MauiProgram.CreateMauiApp();
}
}
在 iOS 上,附加的映射器操作根本不会被触发(在 Platforms.iOS.AppDelegate.cs 中):
[Register("AppDelegate")]
public class AppDelegate : MauiUIApplicationDelegate
{
protected override MauiApp CreateMauiApp() {
System.Diagnostics.Debug.WriteLine("IN CREATE MAUI APP iOS");
ToolbarHandler.Mapper.AppendToMapping("CustomToolbarMapper2", (handler, toolbar) =>
{
// Not reached!!
System.Diagnostics.Debug.WriteLine("IN TOOLBAR HANDLER");
});
return MauiProgram.CreateMauiApp();
}
}
重现步骤 将自定义映射附加到现有 ToolbarHandler.Mapper 属性。 在 iOS 上运行该项目。 预期结果: 调用附加映射器操作中的代码。
目前结果: 未调用附加映射器操作中的代码。
公共复制项目存储库的链接 https://github.com/JordiCasas/ToolbarHandlerIssue
深入研究您的问题后,无法修改处理程序中的ToolbarItem(.NET MAUI 7)。
原因是,当使用handler时,ToolbarItem已经处于创建状态,但根据ToolbarItem Class文档,ToolbarItem创建后任何更改都将被忽略。请参阅下面备注:
工具栏项的属性发生任何更改后 添加的内容将被忽略。
我尝试更改处理程序中 ToolbarItem 的背景,但失败了。
materialToolbar.SetBackgroundColor(Colors.Green.ToPlatform());
我注意到您打开了一个新问题:Appished ToolbarHandler 映射器操作未在 iOS #16467 上调用,您可以在那里跟进。