添加链接
link之家
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接
首发于 CodingBlog

WPF中应用华为鸿蒙字体

WPF中应用华为鸿蒙字体

伴随着华为鸿蒙系统的发布,系统内置的字体开放免费商用,最近注意到某些网站如B站已经应用该字体了,着实有被惊艳到。下面介绍如何在WPF程序中应用该字体。

关于 HarmonyOS Sans

华为鸿蒙字体 (HarmonyOS Sans) 是华为和汉仪字库合作定制,专门为鸿蒙操作系统设计打造,设计上聚焦于功能性、普适性,字形和谷歌思源黑体、阿里巴巴普惠体以及 OPPO 手机公司的 OPPO SANS等免费商用字体有点类似,是一款适合阅读的多字重中性字体。字体文件可通过以下链接获取 HarmonyOS 设计资源下载

引入字体文件

通过以上链接下载到字体压缩包HarmonyOS-Sans.zip后,解压出我们所需要的字体文件,这里以HarmonyOS_Sans_SC_Regular.ttf为例。

在WPF项目中创建Resources目录,在Resources目录下进一步创建Font目录,将上一步解压出的字体文件添加至Font目录下,并将该文件属性的Build Action设置为Resource。

编辑 App.xaml 文件,添加该字体资源:

<Application.Resources>
    <ResourceDictionary>
            <ResourceDictionary.MergedDictionaries>
                <ResourceDictionary>
                    <FontFamily x:Key="Harmony">pack://application:,,,/Resources/Font/HarmonyOS_Sans_SC_Regular.ttf#HarmonyOS Sans SC Regular</FontFamily>
                </ResourceDictionary>
            </ResourceDictionary.MergedDictionaries>
    </ResourceDictionary>
  </Application.Resources>

至此,鸿蒙字体资源即配置完成,后面在任何控件上设置字体属性为 Harmony 静态资源即可,例如:

<TextBlock FontFamily="{StaticResource Harmony}" Text="构建万物互联的智能世界" />

设置默认字体

如果不想逐个窗口逐个控件地设置该字体,而是想在全局应用该字体,则可以在Resources目录下添加资源字典文件: DefaultSettingsDictionary.xaml

<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
                    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
    <Style TargetType="{x:Type TextBlock}">
        <Setter Property="FontFamily" Value="{StaticResource Harmony}" />
        <Setter Property="FontSize" Value="14" />
    </Style>
    <Style TargetType="{x:Type TextElement}">
        <Setter Property="FontFamily" Value="{StaticResource Harmony}" />
        <Setter Property="FontSize" Value="14" />
    </Style>
    <Style TargetType="{x:Type Window}">
        <Setter Property="FontFamily" Value="{StaticResource Harmony}"/>
        <Setter Property="FontSize" Value="14"/>
    </Style>
</ResourceDictionary>

然后,再次编辑 App.xaml 文件,声明该资源文件:

<Application.Resources>
    <ResourceDictionary>
            <ResourceDictionary.MergedDictionaries>
                <ResourceDictionary>
                    <FontFamily x:Key="Harmony">pack://application:,,,/Resources/Font/HarmonyOS_Sans_SC_Regular.ttf#HarmonyOS Sans SC Regular</FontFamily>
                </ResourceDictionary>