WPF 中的嵌入字体不起作用

Jak*_*ner 5 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">
Run Code Online (Sandbox Code Playgroud)

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

<TextBlock FontFamily="./_Resources/#Segoe UI Symbol">
Run Code Online (Sandbox Code Playgroud)

这不适用于 Windows 8 或 Windows 7!我为 BuildAction 尝试了不同的设置:Resource、Embedded Resource 和 Content,但它们都不起作用。

Jak*_*ner 6

我终于找到了一种方法,即使安装了旧版本(即在 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">
Run Code Online (Sandbox Code Playgroud)

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

Windows 7:5.01(823kb)

Windows 8:5.90 (1660kb)

Windows 8.1:6.09 (1740kb)