C#UWP动态更改全局字体
我在C#UWP动态更改全局字体,c#,fonts,uwp,resources,C#,Fonts,Uwp,Resources,我在App.xaml中创建了一个全局字体资源,如下所示: <Application.Resources> <ResourceDictionary> <FontFamily x:Key="GlobalFontLight">Arial</FontFamily> <FontFamily x:Key="GlobalFont">Segoe UI</FontFamily> <
App.xaml
中创建了一个全局字体资源,如下所示:
<Application.Resources>
<ResourceDictionary>
<FontFamily x:Key="GlobalFontLight">Arial</FontFamily>
<FontFamily x:Key="GlobalFont">Segoe UI</FontFamily>
<FontFamily x:Key="GlobalFontBold">Caibri</FontFamily>
</ResourceDictionary>
</Application.Resources>
<TextBlock Text="{Binding Font, Source={StaticResource CustomUISettings}}" />
但是什么也没有发生,
TextBlock
仍然使用旧字体。如果我在InitializeComponent()之前运行此代码代码>然后它按我的要求工作,但在那之后没有。有人知道我做错了什么吗?如何实现字体的这种动态更改?因为UWP不支持DynamicSource
这是一个相当大的问题。StaticResource
和meresource
扩展不会将您保存在此处,因为它们仅在评估时绑定,并且在基础资源更改时不会更新已评估的属性
第一个选项是向后导航并再次导航到同一页面,以便重新加载控件并重新评估资源
如果你想要更具活力的东西,请退房。如果您遵循该解决方案,则可以创建一个实现INotifyPropertyChanged
的类,该类将包含类型为FontFamily
的属性,将此实例存储在StaticResource
中,然后使用绑定而不是StaticResource
,如下所示:
<Application.Resources>
<ResourceDictionary>
<FontFamily x:Key="GlobalFontLight">Arial</FontFamily>
<FontFamily x:Key="GlobalFont">Segoe UI</FontFamily>
<FontFamily x:Key="GlobalFontBold">Caibri</FontFamily>
</ResourceDictionary>
</Application.Resources>
<TextBlock Text="{Binding Font, Source={StaticResource CustomUISettings}}" />
很高兴它有帮助:-)。快乐编码!