WPF多个同一系列的Font文件

问题描述 投票:3回答:3

我有以下字体文件。

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包含几个文件,每个文件包含字体样式?

wpf fonts winrt-xaml
3个回答
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>

祝你好运。


3
投票

这是一种更好的方法:

  1. /Fonts文件夹添加到您的解决方案中。
  2. 将True Type字体(*.ttf)文件添加到该订单
  3. 将文件包含在项目中
  4. 选择字体并将其添加到解决方案中
  5. 设置BuildAction: ResourceCopy 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>
  6. 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>
  7. 像这样应用你的字体: <TextBlock x:Name="myTextBlock" Text="foobar" FontFamily="{StaticResource NotoSans}" FontSize="10.0" FontStyle="Normal" FontWeight="Regular" />
  8. 您还可以强制设置字体: var uri = new Uri("pack://application:,,,/"); myTextBlock.FontFamily = new FontFamily(uri, "./Fonts/#NotoSans");

References


1
投票

这实际上是可能的!而不是指定FontFamily="/Fonts/MyFont/MyFont-Regular.ttf#My Font",您应该只指定包含您的字体文件和字体名称的文件夹:

FontFamily="/Fonts/MyFont/#My Font"

然后WPF检查该目录中的所有字体文件,如果字体名称与FontFamily之后指定的名称匹配,则将它们加载到一个#中。

这样,您可以在资源中轻松定义一个FontFamily,并通过指定属性FontWeightFontStyle来使用其样式:

<FontFamily x:Key="MyFont">/Fonts/MyFont/#My Font</FontFamily>

<!-- somewhere else: -->
<TextBlock
    Text="Hello World"
    FontFamily="{StaticResource MyFont}"
    FontWeight="Bold"/>

这将自动使用该文件夹中的TTF文件。

© www.soinside.com 2019 - 2024. All rights reserved.