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