#fonts #xamarin.forms #xamarin.forms-styles
#шрифты #xamarin.forms #xamarin.forms-стили
Вопрос:
Я пытаюсь установить пользовательский шрифт для всего приложения xamarin forms, используя style в app.xaml. Но я получаю необработанное исключение для того же.
<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>
Используя стиль на моей странице содержимого следующим образом
<Label Style="{StaticResource labelFont}"></Label>
Любое решение для этого?
Комментарии:
1. Вы читали документы? developer.xamarin.com/guides/xamarin-forms/user-interface/text /…
2. @Jason, да, я работаю со ссылкой на то же самое, но как добавить общий шрифт для всего приложения, я имею в виду из файла шрифта
Ответ №1:
Если вы хотите установить шрифт для всех меток с помощью файла шрифтов, вам необходимо создать пользовательский рендерер. Там переопределите 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, наследуемый от 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;
Имейте в виду, что path в Android использует ‘/’ в качестве разделителей, а не ‘.’ как в формах.