WPF中的嵌入字体不起作用

时间:2015-01-11 23:44:03

标签: c# wpf fonts

我有一个WPF应用程序,我使用字体“Segoe UI Symbol”中的图标。但是当部署到Windows 7时,我意识到图标丢失了,因为在Windows 8中更新了字体。

我尝试按照以下说明在WPF应用程序中嵌入字体作为资源:http://msdn.microsoft.com/en-us/library/ms753303.aspx 但它不起作用。

最初我有:

<TextBlock FontFamily="Segoe UI Symbol">

在Windows 8计算机上运行正常。 然后我将seguisym.ttf添加到目录“_Resources”,然后使用:

<TextBlock FontFamily="./_Resources/#Segoe UI Symbol">

这不适用于Windows 8或Windows 7! 我为BuildAction尝试了不同的设置:资源,嵌入式资源和内容,但它们都不起作用。

3 个答案:

答案 0 :(得分:3)

即使安装了旧版本(即在Windows 7上),我终于找到了使用较新版“Segoe UI Symbol”的方法。此方法也适用于ClickOnce安装,无需引导。

我猜这个问题是由与Windows中已经加载的字体的名称冲突引起的。所以我重命名了新版本以避免冲突。它有效。

1) Download utility program Typograf from this link: http://www.neuber.com/typograph/
2) Open directory where you have a copy of your font file
3) Click on font in list
4) Click Properties button in bar
5) Click Rename button, specify a new name (I chose "SegoeDynamic") and select where to save the new file
6) Add the new font file to your Visual Studio project directory (my directory is "/_Resources")
7) Use relative path or root path as you wish when referencing the font dynamically

 <TextBlock FontFamily="../_Resources/#SegoeDynamic">
 <TextBlock FontFamily="pack://application:,,,/_Resources/#SegoeDynamic">

请注意,“Segoe UI Symbol”在多个版本中发布,每个版本添加更多符号。我至少发现了以下内容:

Windows 7:5.01(823kb)

Windows 8:5.90(1660kb)

Windows 8.1:6.09(1740kb)

答案 1 :(得分:1)

您使用TextBlock输入的控件相对。如果您想从项目根文件夹中引用字体,则应使用这样:

<TextBlock FontFamily="pack://application:,,,/_Resources/#Segoe UI Symbol">

答案 2 :(得分:1)

首先非常感谢@Jakob Lithner和其他贡献者。

->我正在不支持某些Unicode字符的Win 7 PC上测试我的wpf应用程序。按照建议,我在c#-project中创建了Resources> Fonts文件夹,并在其中复制了字体seguisym.ttf(添加为“资源”;“如果更新则复制”)。

FontFamily="pack://application:,,,/<NameOfMyC#ProjectInSolution>;component/Resources/Fonts/seguisym.ttf#Segoe UI Symbol"

关于Linthner先生的解决方案的唯一变化是,我没有重命名字体,而是在字体文件名前添加了“ #Segoe UI Symbol”

比利时的问候!