【问题标题】:Xamarin Form setter FontFamily reference custom font in same file themeXamarin Form setter FontFamily 在同一文件主题中引用自定义字体
【发布时间】:2020-04-10 15:35:32
【问题描述】:

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

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

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

【问题讨论】:

  • 请不要将代码或错误作为图片发布。阅读How to Ask,了解关于 SO 问题的注意事项。

标签: c# xamarin xamarin.forms coding-style


【解决方案1】:

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

由于您稍后定义了字体资源,因此在设置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>

【讨论】:

    【解决方案2】:

    您可以看到here,您的DefaultTheme 是一种全局样式,因此您需要为此使用DynamicResource。

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

    所以从技术上讲,只需将该行更改为 &lt;Setter Property="FontFamily" Value="{DynamicResource Montserrat-Regular}"/&gt;

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-08-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-02-05
      • 2019-08-05
      相关资源
      最近更新 更多