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”
来自比利时的亲切问候!
我有一个 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”
来自比利时的亲切问候!