我有以下字体文件。
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
包含几个文件,每个文件包含字体样式?
你不能。但是,您可以将自定义字体包装到样式/资源中:
<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>
祝你好运。
这是一种更好的方法:
/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");
这实际上是可能的!而不是指定FontFamily="/Fonts/MyFont/MyFont-Regular.ttf#My Font"
,您应该只指定包含您的字体文件和字体名称的文件夹:
FontFamily="/Fonts/MyFont/#My Font"
然后WPF检查该目录中的所有字体文件,如果字体名称与FontFamily
之后指定的名称匹配,则将它们加载到一个#
中。
这样,您可以在资源中轻松定义一个FontFamily
,并通过指定属性FontWeight
和FontStyle
来使用其样式:
<FontFamily x:Key="MyFont">/Fonts/MyFont/#My Font</FontFamily>
<!-- somewhere else: -->
<TextBlock
Text="Hello World"
FontFamily="{StaticResource MyFont}"
FontWeight="Bold"/>
这将自动使用该文件夹中的TTF文件。