在资源字典中添加字体族

4

我正在使用MSDN教程来在我的WPF应用程序中添加FontFamily,在.csproj文件中,我有以下内容:

  <ItemGroup>
    <Resource Include="Resources\MetaOT-Norm.otf" />
    <Resource Include="Resources\MetaOT-Bold.otf" />
  </ItemGroup>

我在ResourceDictionary中添加了fontfamily,就像这样:

<FontFamily x:Key="FontMetaOT">./Resources/#Meta OT</FontFamily>

但是它并没有生效...(我已经尝试过在Windows字体目录中使用字体文件,它可以正常工作)。有什么想法吗?

这是OpenType字体的问题吗? - Ahmet B. Badın
@ahmet 你的意思是什么?实际上,我没有找到任何使用.otf扩展名的示例,大多数使用.ttf扩展名...你认为我可以在这个代码中使用.otf扩展名吗? - rad
Silverlight支持OTF。您尝试过直接引用吗?像这样:http://blogs.silverlight.net/blogs/msnow/archive/2008/09/25/silverlight-tip-of-the-day-46-font-support-in-silverlight.aspx - Jeremiah
问题在于Uri没有解析出来...如果我尝试../Resources/#Meta OT,它可以正常工作。 - rad
1个回答

3
如果您正在使用资源字典文件,则必须使用Pack URI Scheme来引用这些文件。 例如:

以下示例显示了位于引用程序集项目文件夹根目录中的XAML资源文件的封装URI。

pack://application:,,,/ReferencedAssembly;component/ResourceFile.xaml

以下示例显示了位于引用程序集项目文件夹的子文件夹中的XAML资源文件的打包URI。
pack://application:,,,/ReferencedAssembly;component/Subfolder/ResourceFile.xaml

以下示例显示了一个XAML资源文件的打包URI,该文件位于引用的特定版本程序集项目文件夹的根文件夹中。
pack://application:,,,/ReferencedAssembly;v1.0.0.1;component/ResourceFile.xaml

如果文件位于输出文件夹中,您可以使用源站点来引用它:
以下示例显示了XAML源站点的打包URI,存储在可执行程序集启动的位置。
pack://siteoforigin:,,,/SiteOfOriginFile.xaml

以下示例显示了一个XAML网站源文件的打包URI,该文件存储在相对于启动应用程序的可执行程序集所在位置的子文件夹中。
pack://siteoforigin:,,,/Subfolder/SiteOfOriginFile.xaml

作为一个例子:
    <UserControl.Resources>
    <ResourceDictionary>
        <ResourceDictionary.MergedDictionaries>
            <!--A resource dictionary in the output folder in the Assets folder-->
            <ResourceDictionary Source="pack://siteoforigin:,,,/Assets/OpenIconsDictionary.xaml"/>
            <!--A resource dictionary packed in the Gui dll-->
            <ResourceDictionary Source="pack://application:,,,/Gui;component/Assets/PackedIconsDictionary.xaml"/>
        </ResourceDictionary.MergedDictionaries>
      </ResourceDictionary>
</UserControl.Resources>



<!--In the output folder /Assets/OpenIconsDictionary.xaml (Build Action: Embedded Resource, Copy always)-->
<ResourceDictionary
                xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
                xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">

    <BitmapImage x:Key="Icon"                 
                 UriSource="pack://siteoforigin:,,,/Images/image.png"/>


</ResourceDictionary>


<!--In Gui.dll in the folder /Assets/PackedIconsDictionary.xaml (Build Action: Page, Do not copy)-->
<ResourceDictionary
                xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
                xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">

    <BitmapImage x:Key="Icon"                 
                 UriSource="pack://siteoforigin:,,,/Images/image.png"/>


</ResourceDictionary>

3
我该把这个放在哪里使用,是在 FontFamily 标签内还是在 Resource 内?最好能看到一个完整的示例。 - CularBytes

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接