我想使用FormattedText.BuildGeometry來確定如何佈局字符,以便確定鼠標的邏輯位置。在我的上下文中,FormattedText可以假定爲一行 - 我應該得到一個帶有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 – 2012-03-19 12:35:56