FormattedText.BuildGeometryを使用して、マウスの論理位置を決定するために、文字の配置方法を決定しようとしています。私の文脈では、FormattedTextは1行であると見なすことができます。1文字の子ジオメトリを持つ1つの子を持つジオメトリグループを取得する必要があります。これは、文字 "f"と "t"の場合、FormattedTextのテキスト内の文字を繰り返すと、行のジオメトリの数がテキストの文字数よりも少なくなります。FormattedText.BuildGeometry文字を削除する
例コード:
var tf = new Typeface(new FontFamily("Calibri"), FontStyles.Normal, FontWeights.Normal, FontStretches.Normal);
var ft = new FormattedText("ff", CultureInfo.CurrentCulture, FlowDirection.LeftToRight, tf, 14, Brushes.Black);
var g = ft.BuildGeometry(new Point(0, 0));
var gc = (GeometryGroup)((GeometryGroup)g).Children[0];
Debug.Assert(gc.Children.Count == ft.Text.Length, "Expected length of " + ft.Text.Length + " but found " + gc.Children.Count);
あなただけの空のWPFアプリケーションでボタンにこれを添付することができます。
これは "ff"または "tt"を含むものでは失敗します。フォントを変更すると動作が変わります - これを引き起こす文字が見つかりませんでした。
ここに答えがあります:http://social.msdn.microsoft.com/Forums/eu/wpf/thread/ddd9c850-25a6-4b99-8a43-5816a0d329a1 –