WPF - 添加自定义字体

16
我正在尝试将自定义字体作为应用程序资源添加。 我在应用程序中有一个名为“CustomFont”的目录,并且其中的所有字体都设置为“Resource”。
<Window.Resources>
    <Style x:Key="Gotham-XLight">
        <Setter Property="TextElement.FontFamily" 
                Value="/CustomFonts;Component/#Gotham-XLight" />
    </Style>
</Window.Resources>

然后在我的TextBlock上,我有这个东西:(在网格中)

<TextBlock x:Name="TimeTextBlock" Style="{DynamicResource Gotham-XLight}" 
           TextAlignment="Center" FontSize="25" FontWeight="Bold" 
           Foreground="White" Text="TextBlockTimer" 
           Margin="105,242.974,0,226.975" HorizontalAlignment="Left" 
           Width="221.919" />

但是我没有看到其他人说的那种字体。我做错了什么吗?

4个回答

23
你可能需要检查字体的名称,你需要指定字体的名称而不是文件的名称。
双击字体文件,它应该显示一个“字体名称:”,这就是你需要确保在你的样式中指定的名称。

7

试试这个

<Window.Resources>
    <Style x:Key="Gotham-XLight">
        <Setter Property="TextElement.FontFamily" Value="CustomFonts/#Gotham-XLight" />
    </Style>
</Window.Resources>

另外,如果您不打算在运行时更改样式,{StaticResource Gotham-XLight} 的性能将更高。


我无法使用“{StaticResource StyleName}”使其正常工作,后来意识到问题所在,只能回退到“{DynamicResource StyleName}”。 - Dinei

2
在XAML中,我是这样做的:
    <Button Grid.Column="1" Grid.RowSpan="2" Name="start" Margin="5" Click="start_Click">
        <TextBlock Name="test" FontFamily="pack://application:,,,/Y_Yoga;Component/Resources/#FontAwesome">&#xF04B;</TextBlock>
    </Button>

然而,我不知道#FontAwesome是字体的嵌入名称还是我重命名.ttf文件后的结果。
希望对您有所帮助!

尝试理解pack语法:Y_Yoga代表什么? - Andrew Shepherd
2
这只是一个应用程序的自定义名称。因此,路径应该像下面这样: FontFamily="pack://application:,,,/<YOUR_APP_NAME_HERE>;Component/Resources/#<YOUR_FONT_NAME_HERE>" - sdd
<YOUR_APP_NAME_HERE> should be <YOUR_ASSEMBLY_NAME_HERE> - highboi

1
晚了些回复,但值得一提。如果要添加一个自定义字体,以便在窗口中全局应用,您可以在csproj文件中添加以下内容,将项目的Fonts文件夹中的字体作为资源包含进去。
 <ItemGroup>
    <Resource Include="Fonts\*.ttf" />
 </ItemGroup>

然后在您的窗口 XAML 中,您可以在 Window 部分中指定 FontFamily:

<Window x:Class="Namespace.MainWindow"
    ...
    FontFamily="/Fonts/#[FONT NAME]"
    Title="">
  <Grid>
    ...
  </Grid>
</Window>

我希望这能帮助到某些人,因为我花了一些时间来理解它。


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