我试图在app.xaml中使用style为整个xamarin表单应用程序设置自定义字体。但是我得到了未处理的异常。
<OnPlatform x:Key="AppFontFamily" x:TypeArguments="x:String"
Android="customfont.otf#CustomFont-Regular">
</OnPlatform>
<Style x:Key="labelFont" TargetType="Label">
<SetterProperty Property="FontFamily" Value="{StaticResource AppFontFamily}"></SetterProperty>
</Style>
在我的内容页中使用style
<Label Style="{StaticResource labelFont}"></Label>
有解决方案吗?
如果你想使用字体文件为所有标签设置字体,你需要创建一个自定义渲染器。在这里,像这样重写OnElementChanged:
protected override void OnElementChanged(ElementChangedEventArgs<Label> e)
{
base.OnElementChanged(e);
try
{
Typeface font = Typeface.CreateFromAsset(Forms.Context.Assets, path);
Control.Typeface = font;
}
catch(Exception ex)
{
System.Diagnostics.Debug.WriteLine("Unable to make typeface:" + ex);
}
}
然而,如果你想能够为每个标签设置自定义字体,你需要创建(在pcl中)一个自定义标签类,继承label,并添加一个font属性(准确地说-属性,你将用来传递字体文件的路径)。
public static readonly BindableProperty CustomFontProperty =
BindableProperty.Create(
"CustomFont",
typeof(string),
typeof(CustomLabel),
default(string));
public string CustomFont
{
get { return (string)GetValue(CustomFontProperty); }
set { SetValue(CustomFontProperty, value); }
}
然后在你的渲染器中,你可以像这样读取这个属性:
var label = Element as CustomLabel;
string path = label.CustomFont;
请注意,Android中的path使用'/'作为分隔符,而不是'。’就像在form里一样。