Windows通用应用程序的字体指标
本文关键字:字体 应用程序 Windows | 更新日期: 2023-09-27 18:25:45
一段时间以来,我一直在努力寻找Windows 10中的API,这些API将为我提供在C#中开发通用应用程序时所需的所有字体度量信息。
我试图解决的真正问题是沿着一条路径绘制文本。我已经有了代码,可以在路径上给定距离的情况下识别给定点的坐标。我目前缺乏的是识别角色之间适当距离的能力。
我也想知道字体的特征,如前导、尾随、上升、下降等。我相信TextFormatter已经不可用了,或者可能,我不知道如何访问它。
有人能帮我提供一个例子吗?或者最好是为我需要的课程提供正确的Microsoft文档。
感谢
以下工作原理。这太疯狂了,我相信还有更好的方法。如果你经常需要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;
}