如何为自定义字体族增加权重?

5

我有多个来自同一字体家族的.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

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或不同的字体文件。

2
谢谢您的回答,但这正是我所问的。我需要一种方法来将字重属性与相应的字体文件匹配,或者使用字重属性针对单独的字体文件。 - TheSETJ

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接