如何使用ShellRenderer实施CustomMoreNavigationControllerDelegate?
以前,我能够使用TabBedrenderer通过实现CustomMoreNavigationControllerDelegate来对标签栏进行更大的菜单页面,以便……
public class ExtendedTabbedPageRenderer : TabbedRenderer
{
protected override void OnElementChanged(VisualElementChangedEventArgs e)
{
base.OnElementChanged(e);
if (e.NewElement != null)
{
MoreNavigationController.Delegate = new CustomMoreNavigationControllerDelegate();
}
}
}
我现在使用Shell Navigation,因此如何使用ShellRenderer(因为没有OnelementChanged,我如何分配/实现此类覆盖)?
我更多的菜单样式课
internal class CustomMoreNavigationControllerDelegate : UINavigationControllerDelegate
{
public override void WillShowViewController(UINavigationController navigationController, UIViewController viewController, bool animated)
{
viewController.NavigationController.NavigationBarHidden = false;
UILabel titleLabel = new UILabel();
if (viewController.NavigationItem.Title != "More")
{
titleLabel.Text = viewController.NavigationItem.Title;
}
else
{
titleLabel.Text = "More";
}
titleLabel.TextColor = Xamarin.Forms.Application.Current.UserAppTheme == OSAppTheme.Dark ? UIColor.White : UIColor.Black;
viewController.NavigationItem.TitleView = titleLabel;
viewController.View.BackgroundColor = Xamarin.Forms.Application.Current.UserAppTheme == OSAppTheme.Dark ? ExtendedTabbedPageRenderer.iOSDarkPageBackgroundColor : ExtendedTabbedPageRenderer.iOSLightPageBackgroundColor;
viewController.View.TintColor = Xamarin.Forms.Application.Current.UserAppTheme == OSAppTheme.Dark ? UIColor.White : UIColor.Black;
if (viewController.View is UITableView tableView)
{
tableView.SeparatorColor = Xamarin.Forms.Application.Current.UserAppTheme == OSAppTheme.Dark ? UIColor.White : UIColor.Black;
foreach (var cell in tableView.VisibleCells)
{
cell.BackgroundColor = Xamarin.Forms.Application.Current.UserAppTheme == OSAppTheme.Dark ? ExtendedTabbedPageRenderer.iOSDarkPageBackgroundColor : ExtendedTabbedPageRenderer.iOSLightPageBackgroundColor;
cell.TextLabel.TextColor = cell.TintColor = Xamarin.Forms.Application.Current.UserAppTheme == OSAppTheme.Dark ? UIColor.White : UIColor.Black;
}
}
}
}
Previously I was able to use TabbedRenderer to stylize the tabbed bar More menu page by implementing CustomMoreNavigationControllerDelegate as so...
public class ExtendedTabbedPageRenderer : TabbedRenderer
{
protected override void OnElementChanged(VisualElementChangedEventArgs e)
{
base.OnElementChanged(e);
if (e.NewElement != null)
{
MoreNavigationController.Delegate = new CustomMoreNavigationControllerDelegate();
}
}
}
I'm now using Shell navigation instead, and so how can I assign/implement this class using ShellRenderer (since there is no OnElementChanged override)?
My More menu styling class
internal class CustomMoreNavigationControllerDelegate : UINavigationControllerDelegate
{
public override void WillShowViewController(UINavigationController navigationController, UIViewController viewController, bool animated)
{
viewController.NavigationController.NavigationBarHidden = false;
UILabel titleLabel = new UILabel();
if (viewController.NavigationItem.Title != "More")
{
titleLabel.Text = viewController.NavigationItem.Title;
}
else
{
titleLabel.Text = "More";
}
titleLabel.TextColor = Xamarin.Forms.Application.Current.UserAppTheme == OSAppTheme.Dark ? UIColor.White : UIColor.Black;
viewController.NavigationItem.TitleView = titleLabel;
viewController.View.BackgroundColor = Xamarin.Forms.Application.Current.UserAppTheme == OSAppTheme.Dark ? ExtendedTabbedPageRenderer.iOSDarkPageBackgroundColor : ExtendedTabbedPageRenderer.iOSLightPageBackgroundColor;
viewController.View.TintColor = Xamarin.Forms.Application.Current.UserAppTheme == OSAppTheme.Dark ? UIColor.White : UIColor.Black;
if (viewController.View is UITableView tableView)
{
tableView.SeparatorColor = Xamarin.Forms.Application.Current.UserAppTheme == OSAppTheme.Dark ? UIColor.White : UIColor.Black;
foreach (var cell in tableView.VisibleCells)
{
cell.BackgroundColor = Xamarin.Forms.Application.Current.UserAppTheme == OSAppTheme.Dark ? ExtendedTabbedPageRenderer.iOSDarkPageBackgroundColor : ExtendedTabbedPageRenderer.iOSLightPageBackgroundColor;
cell.TextLabel.TextColor = cell.TintColor = Xamarin.Forms.Application.Current.UserAppTheme == OSAppTheme.Dark ? UIColor.White : UIColor.Black;
}
}
}
}
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
您需要
覆盖
所需的方法才能通过shellRenderer
类的子类执行所需的自定义,以自定义塔巴尔的外观。例如,在iOS中,如果要设置Shell应用程序菜单的文本。
代码段:
有关更多详细信息,请参阅我们的MS 官方文档。
You need
override
the required methods to perform the required customization via a subclass of theShellRenderer
class to customize the Tabbar appearance.For example,in iOS, if you want to set the text of the more menu of the Shell application.
Code snippet:
For more details, please refer to our MS official docs.