【发布时间】:2015-06-20 20:24:31
【问题描述】:
我有一个为 WPF 应用程序定义样式和一些控件的程序集。在这个程序集中,我有一个 ResourceDictionary,它指定了一个“默认字体”,供程序集中的其他控件和样式使用。
<FontFamily x:Key="DefaultFontFamily">Segoe UI</FontFamily>
<sys:Double x:Key="DefaultFontSize">15</sys:Double>
我想做的是将 DefaultFontFamily 更改为与程序集链接(未嵌入)的自定义字体。
我在项目中创建了一个“资源”文件夹,并在那里复制了自定义字体。我已将字体的“构建操作”设置为“内容”,将“复制到输出目录”设置为“如果较新则复制”。
该项目是包含另一个项目的解决方案的一部分,该项目使用程序集中的样式,因此在构建解决方案时,字体会按预期复制。我似乎无法指定正确的文件夹来引用字体。
什么有效:
<FontFamily x:Key="DefaultFontFamily">C:\code\Solution\Project\bin\Debug\Resources\Lobster-Regular.ttf#Lobster</FontFamily>
<FontFamily x:Key="DefaultFontFamily">file:///c:/code/Solution/Project/bin/Debug/Resources/Lobster-Regular.ttf#Lobster</FontFamily>
这里的“项目”是引用样式程序集的启动(可执行)项目的名称。
什么不起作用:
<FontFamily x:Key="DefaultFontFamily">\Resources\Lobster-Regular.ttf#Lobster</FontFamily>
<FontFamily x:Key="DefaultFontFamily">.\Resources\Lobster-Regular.ttf#Lobster</FontFamily>
<FontFamily x:Key="DefaultFontFamily">/Resources/#Lobster</FontFamily>
<FontFamily x:Key="DefaultFontFamily">./Resources/#Lobster</FontFamily>
我也尝试将字体的内容设置为“资源”和“嵌入式资源”并尝试了这个:
<FontFamily x:Key="DefaultFontFamily">pack://application:,,,/Resources/Lobster.ttf#Lobster</FontFamily>
这也不起作用。 documentation 说我应该可以使用:
一个字符串,指定包含字体的文件夹以及字体系列名称。文件夹和字体系列名称由 # 字符分隔。文件夹引用可以是绝对的,也可以是相对的。例如,“自定义字体\#我的自定义字体”。
我做错了什么?
【问题讨论】:
-
怎么样 pack://application:,,,/[YourAssembly];component/Resources/Lobster.ttf#Lobster" 并且不要忘记插入 [YourAssembly] - 不确定是否可以诀窍