如何在 Xamarin 中更改导航 Header 中所有工具栏项目的字体
How to change the font of all Toolbar Items in Navigation Header in Xamarin
我在 xamarin 中创建了一个自定义导航页面,以便更改导航栏中工具栏项目的字体。
一切顺利,但是所有工具栏项目的字体都没有改变,只是最后一个出于某种原因。
如您所见,除了字体之外,我还尝试将颜色更改为红色,但这也只适用于最后一项。
XAML:
<ContentPage.ToolbarItems>
<ToolbarItem x:Name="MenuItem1"
Order="Primary"
Text="x1"
Priority="0" />
<ToolbarItem x:Name="MenuItem2"
Order="Primary"
Text="x2"
Priority="1" />
<ToolbarItem x:Name="MenuItem3"
Order="Primary"
Text="x3"
Priority="2" />
<ToolbarItem x:Name="MenuItem4"
Order="Primary"
Text="x4"
Priority="3" />
</ContentPage.ToolbarItems>
iOS:
public class FontAwesomeNavigationPageRenderer : NavigationRenderer
{
protected override void OnElementChanged(VisualElementChangedEventArgs e)
{
base.OnElementChanged(e);
if(e.NewElement != null)
{
var att = new UITextAttributes
{
Font = UIFont.FromName("FontAwesome5Pro-Light", 18),
TextColor = UIColor.Red
};
UIBarButtonItem.Appearance.SetTitleTextAttributes(att, UIControlState.Normal);
}
}
}
我错过了什么?
NavigationRenderer is a UINavigationController in iOS,因此您可以执行以下操作:
var navController = this as UINavigationController;
var navigationItems = navController.NavigationBar.Items)
List<UIBarButtonItem> barButtonItems = new List<UIBarButtonItem>();
foreach(UINavigationItem item in navigationItems) {
barButtonItems.AddRange(item.NavigationBar.leftBarButtonItems);
barButtonItems.AddRange(item.NavigationBar.rightBarButtonItems);
}
foreach(UIBarButtonItem bbItem in barButtonItems) {
//change appearance for each bbItem
}
这将列出此 UINavigationController
的每个 UINavigationItem
,然后获取与它们关联的每个 UIBarButtonItem
。
感谢 @iSpain17 在上面的评论中提供的一些帮助,我终于成功地完成了这项工作。
下面是 iOS 部分的代码
public override void ViewDidAppear(bool animated) {
base.ViewDidAppear(animated);
SetNavigationButtonsPage();
}
private void SetNavigationButtonsPage()
{
var att = new UITextAttributes
{
Font = UIFont.FromName("FontAwesome5Pro-Light", 16),
};
var navigationItems = (this as UINavigationController).NavigationBar.Items;
List<UIBarButtonItem> barButtonItems = new List<UIBarButtonItem>();
foreach (UINavigationItem item in navigationItems)
{
barButtonItems.AddRange(item.LeftBarButtonItems);
barButtonItems.AddRange(item.RightBarButtonItems);
}
foreach (UIBarButtonItem bbItem in barButtonItems)
{
//change appearance for each bbItem
bbItem.SetTitleTextAttributes(att, UIControlState.Normal);
}
}
解决方案是将正在使用的方法从 OnElementChanged 更改为 ViewDidAppear!
谢谢你:)
我在 xamarin 中创建了一个自定义导航页面,以便更改导航栏中工具栏项目的字体。
一切顺利,但是所有工具栏项目的字体都没有改变,只是最后一个出于某种原因。
如您所见,除了字体之外,我还尝试将颜色更改为红色,但这也只适用于最后一项。
XAML:
<ContentPage.ToolbarItems>
<ToolbarItem x:Name="MenuItem1"
Order="Primary"
Text="x1"
Priority="0" />
<ToolbarItem x:Name="MenuItem2"
Order="Primary"
Text="x2"
Priority="1" />
<ToolbarItem x:Name="MenuItem3"
Order="Primary"
Text="x3"
Priority="2" />
<ToolbarItem x:Name="MenuItem4"
Order="Primary"
Text="x4"
Priority="3" />
</ContentPage.ToolbarItems>
iOS:
public class FontAwesomeNavigationPageRenderer : NavigationRenderer
{
protected override void OnElementChanged(VisualElementChangedEventArgs e)
{
base.OnElementChanged(e);
if(e.NewElement != null)
{
var att = new UITextAttributes
{
Font = UIFont.FromName("FontAwesome5Pro-Light", 18),
TextColor = UIColor.Red
};
UIBarButtonItem.Appearance.SetTitleTextAttributes(att, UIControlState.Normal);
}
}
}
我错过了什么?
NavigationRenderer is a UINavigationController in iOS,因此您可以执行以下操作:
var navController = this as UINavigationController;
var navigationItems = navController.NavigationBar.Items)
List<UIBarButtonItem> barButtonItems = new List<UIBarButtonItem>();
foreach(UINavigationItem item in navigationItems) {
barButtonItems.AddRange(item.NavigationBar.leftBarButtonItems);
barButtonItems.AddRange(item.NavigationBar.rightBarButtonItems);
}
foreach(UIBarButtonItem bbItem in barButtonItems) {
//change appearance for each bbItem
}
这将列出此 UINavigationController
的每个 UINavigationItem
,然后获取与它们关联的每个 UIBarButtonItem
。
感谢 @iSpain17 在上面的评论中提供的一些帮助,我终于成功地完成了这项工作。
下面是 iOS 部分的代码
public override void ViewDidAppear(bool animated) {
base.ViewDidAppear(animated);
SetNavigationButtonsPage();
}
private void SetNavigationButtonsPage()
{
var att = new UITextAttributes
{
Font = UIFont.FromName("FontAwesome5Pro-Light", 16),
};
var navigationItems = (this as UINavigationController).NavigationBar.Items;
List<UIBarButtonItem> barButtonItems = new List<UIBarButtonItem>();
foreach (UINavigationItem item in navigationItems)
{
barButtonItems.AddRange(item.LeftBarButtonItems);
barButtonItems.AddRange(item.RightBarButtonItems);
}
foreach (UIBarButtonItem bbItem in barButtonItems)
{
//change appearance for each bbItem
bbItem.SetTitleTextAttributes(att, UIControlState.Normal);
}
}
解决方案是将正在使用的方法从 OnElementChanged 更改为 ViewDidAppear!
谢谢你:)