如何为自定义FontFamily添加重量?

时间:2016-11-23 06:26:53

标签: fonts uwp uwp-xaml font-family

我有来自同一家族的多个.ttf文件,例如:

MyFont.ttf
MyFont_Bold.ttf
MyFont_Light.ttf
MyFont_Medium.ttf

如果我想使用每个权重,我应该将主题定义为单独的FontFamily,如下所示:

<FontFamily x:Key="MyFont">
    ms-appx:///Fonts/MyFont.ttf#MyFont
</FontFamily>
<FontFamily x:Key="MyFont_Bold">
    ms-appx:///Fonts/MyFont_Bold.ttf#MyFont
</FontFamily>
<FontFamily x:Key="MyFont_Light">
    ms-appx:///Fonts/MyFont_Light.ttf#MyFont
</FontFamily>
<FontFamily x:Key="MyFont_Medium">
    ms-appx:///Fonts/MyFont_Medium.ttf#MyFont
</FontFamily>

并使用它们:

<TextBlock FontFamily="{StaticResource MyFont}" />
<TextBlock FontFamily="{StaticResource MyFont_Bold}" />
<TextBlock FontFamily="{StaticResource MyFont_Light}" />
<TextBlock FontFamily="{StaticResource MyFont_Medium}" />

有没有办法使用这样的主题:

<TextBlock FontFamily="{StaticResource MyFont}" />
<TextBlock FontFamily="{StaticResource MyFont}" FontWeight="Bold" />
<TextBlock FontFamily="{StaticResource MyFont}" FontWeight="Light" />
<TextBlock FontFamily="{StaticResource MyFont}" FontWeight="Medium" />

1 个答案:

答案 0 :(得分:1)

TextBlock有一个TextBlock.FontWeight property。使用此属性,我们可以设置 TextBlock 的字体粗细。所以你可以使用如下代码:

<TextBlock FontFamily="{StaticResource MyFont}" FontWeight="Bold">The quick brown fox jumps over the lazy dog.1234567890</TextBlock>
<TextBlock FontFamily="{StaticResource MyFont}" FontWeight="Light">The quick brown fox jumps over the lazy dog.1234567890</TextBlock>
<TextBlock FontFamily="{StaticResource MyFont}" FontWeight="Medium">The quick brown fox jumps over the lazy dog.1234567890</TextBlock>

但是,在使用自定义字体时,字符轮廓的粗细是根据您设置的字体计算的。它无法根据FontWeight使用相应的字体文件。计算出的厚度可能与自定义字体中的厚度不同。例如:

<TextBlock FontFamily="Assets/Fonts/consola.ttf#Consolas" FontSize="36">The quick brown fox jumps over the lazy dog.1234567890</TextBlock>
<TextBlock FontFamily="Assets/Fonts/consolab.ttf#Consolas" FontSize="36">The quick brown fox jumps over the lazy dog.1234567890</TextBlock>
<TextBlock FontFamily="Assets/Fonts/consola.ttf#Consolas" FontSize="36" FontWeight="Bold">The quick brown fox jumps over the lazy dog.1234567890</TextBlock>

在上面的示例中,“consola.ttf”是具有常规字体粗细的字体文件,“onsolab.ttf”是具有粗体字体粗细的字体文件。在第三个TextBlock中,我使用常规字体文件并将FontWeight设置为Bold。输出看起来像:
enter image description here

在将FontWeight设置为Bold之后,您可以看到,字符轮廓的粗细较大,但与使用粗体字体文件的粗细不同。因此,您可能需要根据实际情况考虑是否使用FontWeight或不同的字体文件。