2015-12-06 3 views
1

Я уже некоторое время пытаюсь найти API в Windows 10, который предоставит мне всю информацию о метриках шрифтов, которые мне понадобятся при разработке универсального приложения на C#.Шрифтовые метрики для универсального приложения Windows?

Настоящая проблема, которую я пытаюсь решить, - это нарисовать текст вдоль пути. У меня уже есть код для определения координат заданной точки с заданным расстоянием вдоль пути. В настоящее время мне не хватает возможности определить правильное расстояние между персонажами.

Я также хотел бы узнать характеристики шрифта, такие как ведущий, конечный, восхождение, спуск и т. Д. Я считаю, что TextFormatter больше не доступен или, возможно, я не знаю, как получить к нему доступ.

Может ли кто-нибудь помочь мне, предоставив либо пример, либо предпочтительно правильную документацию Microsoft для класса, который мне нужен.

Спасибо

+0

Вы помечено вопрос как с '' wpf' и выиграть-универсальный-app', вы действительно заинтересованы в МОФ ответ? –

+0

Взгляните на текстовые возможности Win2D: https://github.com/Microsoft/Win2D/wiki/Features –

+0

m-y спасибо за вопрос. Я не совсем уверен, что я отметил это соответствующим образом, так как на данный момент я полагаю, что WPF и универсальный будут обрабатывать это одинаково. Хотя, полагаю, я ошибаюсь. –

ответ

0

Следующие работы. Это хак, черт возьми, и я уверен, что есть лучший способ. Если вам нужны объекты 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; 
} 
Смежные вопросы