我正在尝试将两种自定义字体导入到我的应用程序中。目前,我已经分别在.Droid/Assets
和.iOS/Resources
目录中添加了字体,而iOS则将其加载到我的Info.plist中。
在我的App.xaml中,我执行以下操作在PCL中加载字体:
<Application.Resources>
<ResourceDictionary>
<Style x:Name="BoldFont" TargetType="Label">
<Setter Property="Label.FontFamily">
<Setter.Value>
<OnPlatform x:TypeArguments="x:String">
<OnPlatform.Android>PT_Sans-Narrow-Web-Regular.ttf#PT Sans Narrow</OnPlatform.Android>
<OnPlatform.iOS>PT Sans Narrow</OnPlatform.iOS>
</OnPlatform>
</Setter.Value>
</Setter>
</Style>
</ResourceDictionary>
</Application.Resources>
但是,我希望能够在我的标签中使用多种字体,这就是我将以下代码添加到<ResourceDictionary>
中的原因:
<Style x:Name="RegularFont" TargetType="Label">
<Setter Property="Label.FontFamily">
<Setter.Value>
<OnPlatform x:TypeArguments="x:String">
<OnPlatform.Android>RobotoCondensed-Regular.ttf#Roboto Condensed</OnPlatform.Android>
<OnPlatform.iOS>Roboto Condensed</OnPlatform.iOS>
</OnPlatform>
</Setter.Value>
</Setter>
</Style>
不幸的是,我收到了错误:
具有密钥'Xamarin.Forms.Label'的资源已存在于ResourceDictionary中
此外,我是否真的必须使我的TargetType特定于Label,如果说,我想全局使用这些字体,无论它是Label
还是Entry
?
答案 0 :(得分:0)
首先,使用Style,使用x:Key而不是x:Name。这样可以避免您看到的错误消息。
<Style x:Key="RegularFont" TargetType="Label">
<Setter Property="Label.FontFamily">
<Setter.Value>
<OnPlatform x:TypeArguments="x:String">
<OnPlatform.Android>RobotoCondensed-Regular.ttf#Roboto Condensed</OnPlatform.Android>
<OnPlatform.iOS>Roboto Condensed</OnPlatform.iOS>
</OnPlatform>
</Setter.Value>
</Setter>
</Style>
有时您可以在类型之间共享样式定义。最好的方法是使用TargetType,它是一个公共基类,用于定义要设置的属性。不幸的是,Label和Entry之间没有这样的公共基类。它们各自独立定义FontFamily。