Wpf 加载字体资源并设置基线

Wpf 加载字体资源并设置基线,wpf,xaml,fonts,Wpf,Xaml,Fonts,有没有办法将字体作为资源加载并设置其基线 以下工作: <FontFamily x:Key="DefaultFontFamily">/Swift.UiResources;component/Resources/Fonts/#Meta Offc</FontFamily> 我要指出的是,我试图解决的问题是,从市场营销中传下来的字体,当垂直居中时,呈现的字体比以前的字体高。您可以创建一个复合字体,并将所有Unicode范围映射到嵌入的字体。您需要创建一个扩展名为.Composi

有没有办法将字体作为资源加载并设置其基线

以下工作:

<FontFamily x:Key="DefaultFontFamily">/Swift.UiResources;component/Resources/Fonts/#Meta Offc</FontFamily>

我要指出的是,我试图解决的问题是,从市场营销中传下来的字体,当垂直居中时,呈现的字体比以前的字体高。

您可以创建一个复合字体,并将所有Unicode范围映射到嵌入的字体。您需要创建一个扩展名为
.CompositeFont
的新文件,并给它一个“Resource”的构建操作。其内容应为:

<!-- File: "Resources/Fonts/Custom Font.CompositeFont" in Swift.UiResources -->
<FontFamily xmlns="http://schemas.microsoft.com/winfx/2006/xaml/composite-font"
            xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
            xmlns:s="clr-namespace:System;assembly=mscorlib"
            Baseline="0.9">
  <FontFamily.FamilyNames>
    <s:String x:Key="en-US">Custom Font</s:String>
  </FontFamily.FamilyNames>

  <FontFamily.FamilyMaps>
    <FontFamilyMap Scale="1.0"
                   Target="/Swift.UiResources;component/Resources/Fonts/#Meta Offc"
                   Unicode="0000-007F" />
  </FontFamily.FamilyMaps>
</FontFamily>
#
后面的字体名称应与您在上面的
FontFamily.FamilyNames
中设置的值相匹配

如果要映射超过标准ASCII范围的字符,可以向
Unicode
属性添加更多逗号分隔的字符范围


在过去,我注意到,当您创建在一个或多个映射中使用资源URI的复合字体时,它不会在Visual Studio designer中正确显示,尽管它在运行时工作正常。自从我报告后,他们可能已经修复了此问题。

它看起来不像
Target
属性以与
FontFamily
相同的方式支持URI。我可以指定
“Arial”
,但不能指定
“/#Meta Off”
。事实证明,您部分正确。当我无法使用一个简单的示例时,我记得只有当复合字体被定义为它自己的资源时,
Target
才会处理URI。请参阅更新的答案。哇,谢谢!MSDN和谷歌在查找有关
FamilyNames
FamilyMaps
的详细信息方面都没有任何帮助。你在哪里学的这些东西?有一天我在浏览我的
Windows\font
文件夹,看到里面有一些
.CompositeFont
文件,决定做一些实验:)。WPF附带的复合字体有一些有用的注释。
TypeConverter syntax error encountered while processing intialization string '/Swift.UiResources;component/Resources/Fonts/#Meta Offc'. Element attributes are not allowed on objects created via TypeConverter.
<!-- File: "Resources/Fonts/Custom Font.CompositeFont" in Swift.UiResources -->
<FontFamily xmlns="http://schemas.microsoft.com/winfx/2006/xaml/composite-font"
            xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
            xmlns:s="clr-namespace:System;assembly=mscorlib"
            Baseline="0.9">
  <FontFamily.FamilyNames>
    <s:String x:Key="en-US">Custom Font</s:String>
  </FontFamily.FamilyNames>

  <FontFamily.FamilyMaps>
    <FontFamilyMap Scale="1.0"
                   Target="/Swift.UiResources;component/Resources/Fonts/#Meta Offc"
                   Unicode="0000-007F" />
  </FontFamily.FamilyMaps>
</FontFamily>
/Swift.UiResources;component/Resources/Fonts/#Custom Font