Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/312.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# Windows通用应用的字体度量?_C#_Xaml_Windows 10_Win Universal App - Fatal编程技术网

C# Windows通用应用的字体度量?

C# Windows通用应用的字体度量?,c#,xaml,windows-10,win-universal-app,C#,Xaml,Windows 10,Win Universal App,一段时间以来,我一直在努力寻找Windows10中的API,这些API将为我提供在C#中开发通用应用程序时所需的所有字体度量信息 我试图解决的真正问题是沿路径绘制文本。我已经有了代码来识别给定点的坐标,给定路径上的给定距离。我目前缺乏的是识别字符之间适当距离的能力 我还想知道字体的特点,如前导、尾随、上升、下降等。。。我相信TextFormatter不再可用,或者可能,我不知道如何访问它 有谁能帮我提供一个例子,或者最好是我需要的类的正确的Microsoft文档 感谢您以下作品。这是地狱般的骇客

一段时间以来,我一直在努力寻找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。我认为真正的交易将是从某处获得一个画布缩放字体并从中工作。但我还是不知道在哪里可以买到。