Xamarin Form setter FontFamily 在同一文件主题中引用自定义字体

Xamarin Form setter FontFamily reference custom font in same file theme

我正在尝试从我的默认主题中引用一种样式的字体。但是我发现自己遇到了这个错误,暂时没有找到解决方案...

DefaultTheme.xaml

<Style x:Key="EntryStyle" TargetType="Entry">
    <Setter Property="BorderColor" Value="{StaticResource Gray-300}"/>
    <Setter Property="TextColor" Value="{StaticResource Gray-900}"/>
    <Setter Property="PlaceholderColor" Value="{StaticResource Gray-400}"/>
    <Setter Property="FontFamily" Value="{StaticResource Montserrat-Regular}"/>
    <Setter Property="BackgroundColor" Value="{StaticResource Gray-White}"/>
</Style>

<OnPlatform x:Key="Montserrat-Regular" x:TypeArguments="x:String">
    <OnPlatform.Platforms>
        <On Platform="Android" Value="Montserrat-Regular.ttf#Montserrat-Regular" />
        <On Platform="iOS" Value="Montserrat-Regular" />
        <On Platform="UWP" Value="Assets/Montserrat-Regular.ttf#Montserrat-Regular" />
    </OnPlatform.Platforms>
</OnPlatform>

这是我得到的错误:

Xamarin.Forms.Xaml.XamlParseException : Position 43:39 StaticResource not found for key Montserrat-Regular

你知道如何解决这个问题吗?

如您所见here,您的 DefaultTheme 是全局样式,因此您需要为此使用 DynamicResource。

页面的资源部分中定义的相同样式成功运行。

从技术上讲,只需将该行更改为 <Setter Property="FontFamily" Value="{DynamicResource Montserrat-Regular}"/>

它以先进先出的顺序加载资源。

由于您稍后定义了字体资源,因此在设置 EntryStyle 属性时未找到它。

将 Montserrat-Regular 移到上面 EntryStyle 你应该可以走了。


<!-- 1st -->
<OnPlatform x:Key="Montserrat-Regular" x:TypeArguments="x:String">
    <OnPlatform.Platforms>
        <On Platform="Android" Value="Montserrat-Regular.ttf#Montserrat-Regular" />
        <On Platform="iOS" Value="Montserrat-Regular" />
        <On Platform="UWP" Value="Assets/Montserrat-Regular.ttf#Montserrat-Regular" />
    </OnPlatform.Platforms>
</OnPlatform>
<!-- 2nd -->
<Style x:Key="EntryStyle" TargetType="Entry">
    <Setter Property="BorderColor" Value="{StaticResource Gray-300}"/>
    <Setter Property="TextColor" Value="{StaticResource Gray-900}"/>
    <Setter Property="PlaceholderColor" Value="{StaticResource Gray-400}"/>
    <Setter Property="FontFamily" Value="{StaticResource Montserrat-Regular}"/>
    <Setter Property="BackgroundColor" Value="{StaticResource Gray-White}"/>
</Style>