C# Windows通用应用的字体度量?
一段时间以来,我一直在努力寻找Windows10中的API,这些API将为我提供在C#中开发通用应用程序时所需的所有字体度量信息 我试图解决的真正问题是沿路径绘制文本。我已经有了代码来识别给定点的坐标,给定路径上的给定距离。我目前缺乏的是识别字符之间适当距离的能力 我还想知道字体的特点,如前导、尾随、上升、下降等。。。我相信TextFormatter不再可用,或者可能,我不知道如何访问它 有谁能帮我提供一个例子,或者最好是我需要的类的正确的Microsoft文档C# Windows通用应用的字体度量?,c#,xaml,windows-10,win-universal-app,C#,Xaml,Windows 10,Win Universal App,一段时间以来,我一直在努力寻找Windows10中的API,这些API将为我提供在C#中开发通用应用程序时所需的所有字体度量信息 我试图解决的真正问题是沿路径绘制文本。我已经有了代码来识别给定点的坐标,给定路径上的给定距离。我目前缺乏的是识别字符之间适当距离的能力 我还想知道字体的特点,如前导、尾随、上升、下降等。。。我相信TextFormatter不再可用,或者可能,我不知道如何访问它 有谁能帮我提供一个例子,或者最好是我需要的类的正确的Microsoft文档 感谢您以下作品。这是地狱般的骇客
感谢您以下作品。这是地狱般的骇客,我相信有更好的方法。如果您经常需要CanvasFontFace对象,最好缓存它们,因为这不是一个快速获取工具。拥有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;
}
publicstaticcanvasfontface FindFontFace(){
//非常黑…一定有更好的方法。
CanvasFontFace r=null;
CanvasFontSet=CanvasFontSet.GetSystemFontSet();
字符串fontFaceName=“Regular”;//更改为您的脸。
字符串familyName=“Segoe UI”;//更改为您的家庭。
IReadOnlyList allFaces=set.Fonts;
string key=“en-us”;
foreach(所有面中的CanvasFontFace){
IReadOnlyDictionary faceNames=face.faceNames;
IREADONLYDICTIONAL familyNames=face.familyNames;
if(faceNames.ContainsKey(键)){
if(家庭名称容器(钥匙)){
if(faceNames[键]==fontFaceName){
if(familyNames[key]==familyName){
r=面;
打破
}
}
}
}
}
//如果r为null,则可能是您的姓氏或姓氏不正确。
返回r;
}
以下工作。这是地狱般的骇客,我相信有更好的方法。如果您经常需要CanvasFontFace对象,最好缓存它们,因为这不是一个快速获取工具。拥有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;
}
publicstaticcanvasfontface FindFontFace(){
//非常黑…一定有更好的方法。
CanvasFontFace r=null;
CanvasFontSet=CanvasFontSet.GetSystemFontSet();
字符串fontFaceName=“Regular”;//更改为您的脸。
字符串familyName=“Segoe UI”;//更改为您的家庭。
IReadOnlyList allFaces=set.Fonts;
string key=“en-us”;
foreach(所有面中的CanvasFontFace){
IReadOnlyDictionary faceNames=face.faceNames;
IREADONLYDICTIONAL familyNames=face.familyNames;
if(faceNames.ContainsKey(键)){
if(家庭名称容器(钥匙)){
if(faceNames[键]==fontFaceName){
if(familyNames[key]==familyName){
r=面;
打破
}
}
}
}
}
//如果r为null,则可能是您的姓氏或姓氏不正确。
返回r;
}
您用wpf
和win universal app
标记了问题,您真的对wpf答案感兴趣吗?看看Win2D的文本功能:m-y谢谢您的提问。我不完全确定我是否恰当地标记了它,因为在这一点上,我认为WPF和universal将以相同的方式处理这个问题。虽然我想我可能错了。有一个CanvasFontFace类具有这些度量。现在,如果我能想出如何得到一个CanvasFontFace对象。我找到了一些画布的来源。CanvasFontSet有一个完整的列表。CanvasScaledFont拥有一张CanvasFontFace。我认为真正的交易将是从某处获得一个画布缩放字体并从中工作。但是我仍然不知道在哪里可以找到。你用wpf
和win universal app
标记了这个问题,你真的对wpf答案感兴趣吗?看看Win2D的文本功能:m-y谢谢你的提问。我不完全确定我是否恰当地标记了它,因为在这一点上,我认为WPF和universal将以相同的方式处理这个问题。虽然我想我可能错了。有一个CanvasFontFace类具有这些度量。现在,如果我能想出如何得到一个CanvasFontFace对象。我找到了一些画布的来源。CanvasFontSet有一个完整的列表。CanvasScaledFont拥有一张CanvasFontFace。我认为真正的交易将是从某处获得一个画布缩放字体并从中工作。但我还是不知道在哪里可以买到。