在WPF中使用自定义字体

24
我需要我的WPF应用程序使用另一种语言的真正类型字体。我已经将字体放置在名为“fonts”的文件夹内,并置于项目中。 我正在使用的字体可以在此处免费下载:这里 由于该字体已安装在我的系统中,我首先尝试执行以下操作:
 FontFamily="FMBasuru"

我已经阅读了这里的帖子,并尝试执行以下操作(包括字体名称在内的确切标记)

<Window.Resources>
        <Style x:Key="SinhalaFont">
            <Setter Property="TextElement.FontFamily" Value="fonts/#FMBasuru"/>
        </Style>
    </Window.Resources>

...

 <TextBlock  Style="{DynamicResource SinhalaFont}">r</TextBlock>

我确保使用的是正确的字体名称,而不是字体文件名。 我可能做错了什么?


我不是专家,但也许你应该删除fonts/#fontName单词前面的/字符? - BoltBait
是的,我也试过了。没有运气。 :-( - Prabath Yapa
尝试过使用“<TextBlock FontFamily="./fonts/#SpecialFont"”这个字体,它已经安装在我的系统中了。但是当我第一次尝试使用“FontFamily="SpecialFont"”时,它也没有起作用。这可能与字体有关吗?在ASP.NET中使用这种字体时,我没有遇到任何问题。 - Prabath Yapa
4个回答

22

更新: 创建一个名为“Fonts”的文件夹,复制您想要的字体并将BuildAction更改为Resource。

<Window.Resources>
    <FontFamily x:Key="test" >/Fonts/#Pirulen</FontFamily>
</Window.Resources>
<Grid>
    <TextBlock FontSize="25" HorizontalAlignment="Center" 
               FontFamily="{StaticResource test}">Kishore Kumar</TextBlock>
</Grid>

请参考这份文档

WPF - 添加自定义字体


当然我看过了!我在问题中提供的链接就是指向那个页面的。 - Prabath Yapa
谢谢你。但是结果发现问题在于我指定字体名称的方式有误。 - Prabath Yapa
“将BuildAction更改为Resource”是我缺失的关键。我已经试了几个小时来解决这个问题,直到我读到了这个帖子。 - memory of a dream

13
我尝试了你的代码,使用了这个。
  <Setter Property="TextElement.FontFamily" Value="fonts/#Arial Narrow Bold"/>

而且它成功地运行了。

您是否在“生成操作”中将字体标记为“资源”?如果没有,请现在这样做,然后再次尝试您的代码。


是的,构建操作设置为“资源”。这个字体已经安装在我的系统中。但是即使 FontFamily="SpecialFont" 也不起作用。 - Prabath Yapa
字体目录包含字体文件应该放在你的 WPF 应用程序的根目录下。我无法重现你的错误,在这里它正常工作。你能把整个标记都粘贴在这里,包括你如何命名字体吗? - Mamta D
是的,字体目录是application/fonts/...让我重新编辑我的问题并发布整个标记。 - Prabath Yapa
3
好的,这很疯狂。我刚刚查看了从System.Windows.Media.Fonts.SystemFontFamilies返回的集合。它具有字体名称,但是末尾有一个“x”>'FMBasuru x'。我使用它,它很好用。我原本认为需要使用类似于我在asp.net和winforms中使用的字体类型名称。我的想法错了吗?如果我浪费您的时间在某些愚蠢的事情上,请原谅! - Prabath Yapa
1
是的,FMBasurux是一种锡兰语字体,它总是需要在末尾加上“x”。 - Todd Main
显示剩余3条评论

4

如果不使用样式,你可以在 Window.xaml 中像这样简单地添加字体。我已经将字体文件包含在名为“Fonts”的文件夹中。

<Window

 FontFamily ="./Fonts/#Arial"

>

如果你想为特定的标签或文本块使用另一种字体,可以像这样进行覆盖。应将字体文件插入到 Fonts 文件夹中。
<TextBlock FontFamily = "./Fonts/#Tahoma" ></TextBlock>

0

如何在应用程序中添加自定义字体

这个方法在Blend中可行,但我不确定在Visual Studio中是否适用。

  1. 在Expression Blend中打开项目,在项目面板的Files下,右键点击项目名称,然后选择Add Existing Item。 enter image description here
  2. 浏览到自定义字体文件(通常具有.ttf文件扩展名),选择该文件以使其出现在File文本框中,然后点击“打开”。 自定义字体文件将被添加到您的应用程序,并出现在项目面板的Files下。 enter image description here
  3. 现在,您可以在应用程序中嵌入完整字体或字体的子集,并将该字体应用于应用程序中的文本控件。

字体将会出现在字体列表中

enter image description here

来自 - 将自定义字体添加到您的应用程序


这正是我所需要的。谢谢! - Val

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