Windows通用应用程序的字体指标

本文关键字:字体 应用程序 Windows | 更新日期: 2023-09-27 18:25:45

一段时间以来,我一直在努力寻找Windows 10中的API,这些API将为我提供在C#中开发通用应用程序时所需的所有字体度量信息。

我试图解决的真正问题是沿着一条路径绘制文本。我已经有了代码,可以在路径上给定距离的情况下识别给定点的坐标。我目前缺乏的是识别角色之间适当距离的能力。

我也想知道字体的特征,如前导、尾随、上升、下降等。我相信TextFormatter已经不可用了,或者可能,我不知道如何访问它。

有人能帮我提供一个例子吗?或者最好是为我需要的课程提供正确的Microsoft文档。

感谢

Windows通用应用程序的字体指标

以下工作原理。这太疯狂了,我相信还有更好的方法。如果你经常需要CanvasFontFace对象,你最好缓存它们,因为这不是一个快速的getter。一旦你有了CanvasFontFace对象,你就可以用它来寻找上升、下降等。

public static CanvasFontFace FindFontFace() {
  // Very hacky . . . there has to be a better way . . .
  CanvasFontFace r = null;
  CanvasFontSet set = CanvasFontSet.GetSystemFontSet();
  string fontFaceName = "Regular"; // change to your face . . .
  string familyName = "Segoe UI"; // change to your family . . . 
  IReadOnlyList<CanvasFontFace> allFaces = set.Fonts;
  string key = "en-us";
  foreach (CanvasFontFace face in allFaces) {
    IReadOnlyDictionary<string, string> faceNames = face.FaceNames;
    IReadOnlyDictionary<string, string> familyNames = face.FamilyNames;
    if (faceNames.ContainsKey(key)) {
      if (familyNames.ContainsKey(key)) {
        if (faceNames[key] == fontFaceName) {
          if (familyNames[key] == familyName) {
            r = face;
            break;
          }
        }
      }
    }
  }
  // if r is null, you probably have an incorrect face name or family name.
  return r;
}