我有以下字体文件。
MyFont-Regular.tff
MyFont-Bold.tff
MyFont-Italic.tff
我该如何使用它们?
我可以做到以下几点,
<TextBlock
FontFamily="/Fonts/MyFont/MyFont-Regular.ttf#My Font"
Text="This is my font"/>
如果我不想使用斜体和粗体等样式,该怎么办?我是否可以声明My Font
包含多个文件,每个文件都包含字体样式?
答案 0 :(得分:4)
你做不到。但是,您可以将自定义字体包装到样式/资源中:
<App.Resources>
<FontFamily x:Key="CustomRegular">/Fonts/MyFont/MyFont-Regular.ttf#My Font</FontFamily>
<FontFamily x:Key="CustomBold">/Fonts/MyFont/MyFont-Bold.ttf#My Font</FontFamily>
<FontFamily x:Key="CustomItalic">/Fonts/MyFont/MyFont-Italic.ttf#My Font</FontFamily>
</App.Resources>
然后像这样使用它:
<TextBlock FontFamily="{StaticResource CustomItalic}">Hello world</TextBlock>
需要部分文字斜体吗?
<TextBlock FontFamily="{StaticResource CustomRegular}">
<Run FontFamily="{StaticResource CustomItalic}">Hello</Run>
<Run>World</Run>
</TextBlock>
祝你好运。
答案 1 :(得分:3)
这是一种更好的方法:
/Fonts
文件夹。 *.ttf
)文件添加到该订单设置BuildAction: Resource
和Copy To Output Directory: Do not copy
。您的.csproj
文件现在应该有这样的部分:
<ItemGroup>
<Resource Include="Fonts\NotoSans-Bold.ttf" />
<Resource Include="Fonts\NotoSans-BoldItalic.ttf" />
<Resource Include="Fonts\NotoSans-Italic.ttf" />
<Resource Include="Fonts\NotoSans-Regular.ttf" />
<Resource Include="Fonts\NotoSansSymbols-Regular.ttf" />
</ItemGroup>
在App.xaml
添加<FontFamily>
资源。它应该类似于以下代码示例。请注意,在使用应用程序打包时,URI不包含文件名。
<Applicaton ...>
<Application.Resources>
<FontFamily x:Key="NotoSans">pack://application:,,,/Fonts/#NotoSans</FontFamily>
<FontFamily x:Key="NotoSansSymbols">pack://application:,,,/Fonts/#NotoSansSymbols</FontFamily>
</Application.Resources>
</Application>
像这样应用你的字体:
<TextBlock x:Name="myTextBlock" Text="foobar" FontFamily="{StaticResource NotoSans}"
FontSize="10.0" FontStyle="Normal" FontWeight="Regular" />
您还可以强制设置字体:
var uri = new Uri("pack://application:,,,/");
myTextBlock.FontFamily = new FontFamily(uri, "./Fonts/#NotoSans");
答案 2 :(得分:2)
这实际上是可能!不应指定FontFamily="/Fonts/MyFont/MyFont-Regular.ttf#My Font"
,而应仅指定包含字体文件和字体名称的文件夹:
FontFamily="/Fonts/MyFont/#My Font"
然后,如果字体名称与FontFamily
之后指定的名称匹配,WPF会检查该目录中的所有字体文件并将其加载到一个#
。
通过这种方式,您可以在资源中轻松定义一个FontFamily
,并通过指定属性FontWeight
和FontStyle
来使用其样式:
<FontFamily x:Key="MyFont">/Fonts/MyFont/#My Font</FontFamily>
<!-- somewhere else: -->
<TextBlock
Text="Hello World"
FontFamily="{StaticResource MyFont}"
FontWeight="Bold"/>
这将自动使用该文件夹中的TTF文件。