私が行ったいくつかの調査の結果、あなたの質問が見つかりました。
GlyphRunがpublicコンストラクタを使用して作成し、パラメータとしてTextFormattingModeを受け入れ、そのrendringの使用方法/コンストラクタのためcontols TextFormattingMode = Ideal
すべてWPFでオブジェクトを作成します。
あなたはリフレクション経由GlyphRun.TryCreate()
静的メソッドを呼び出すことができます。
internal static GlyphRun TryCreate(
GlyphTypeface glyphTypeface,
int bidiLevel,
bool isSideways,
double renderingEmSize,
IList<ushort> glyphIndices,
Point baselineOrigin,
IList<double> advanceWidths,
IList<Point> glyphOffsets,
IList<char> characters,
string deviceFontName,
IList<ushort> clusterMap,
IList<bool> caretStops,
XmlLanguage language,
TextFormattingMode textLayout
)
いますが、TextFormattingMode = Ideal
でadvanceWidths
を取得する必要があり、問題を。このためには、GlyphTypeface
クラスが提供する内部メソッドへのリフレクションを介してアクセスする必要があります。あなたはtextFormattingMode = TextFormattingMode.Ideal
とインデックスで辞書にアクセスするあなたは、.NETソースコードをダウンロードし、それを自分でチェックすることができたときにこれらの幅で辞書を返し
GlyphTypeface.AdvanceWidths
プロパティは、内部
internal double GetAdvanceWidth(ushort glyph, TextFormattingMode textFormattingMode, bool isSideways)
に呼び出します。
2番目の質問では、グリフインデックスを取得するためにユニコードコードポイントの代わりにcharを使用すると思います。