WPF 中的嵌入式字体不起作用

Embedded Font in WPF not working

我有一个 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 尝试了不同的设置:资源、嵌入式资源和内容,但其中 none 有效。

您提供的路径是相对于您正在使用TextBlock的控件。如果您想从项目根文件夹中引用字体,您应该使用这个:

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

我终于找到了一种使用新版本 "Segoe UI Symbol" 的方法,即使安装了旧版本(即在 Windows 7 上)。这种方法也适用于 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)

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

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

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

与 Linthner 先生的解决方案相比,唯一的变化是我没有重命名字体,而是在 font-filename 前面加上“#Segoe UI Symbol”

来自比利时的亲切问候!