我試圖創建使用的Silverlight 5 RichTextBox中的用戶控制。我需要能夠插入「內聯ui」,並不能解決如何獲取當前光標位置。Silverlight中的RichTextBox獲得的光標位置
我觸發我這樣的代碼:
this.GetAbsolutePos(this.richText.Selection.Start);
這種方法的膽量是在這裏:
private int GetAbsolutePos(TextPointer textPointer)
{
int index = 0;
TextPointer pos = this.richText.ContentStart;
while (pos.CompareTo(textPointer) != 0)
{
if (pos.IsAtInsertionPosition)
{
index++;
}
pos = pos.GetNextInsertionPosition(LogicalDirection.Forward);
}
return index;
}
鑑於RichTextBox控件下面的文字....
如果光標5之間6在第一行,然後上述函數正確返回5.但隨着光標進一步到文本中的位置變得更加不準確。即在第二行5 & 6返回16和第三行返回27.
它也變得更加困難,因爲我在這些位置插入內聯元素,然後計算爲「符號」,並進一步導致指望出錯。
此圖片顯示,當我在每一行「插入」 5 & 6之間的在線用戶界面發生了什麼。
只是爲了完整性這裏是XAML中從richtext.Xaml(我已經刪除該科/段落元素的所有額外的屬性,以使其更清晰),基於這一言論
<Section>
<Paragraph>
<Run>1234567890</Run>
<LineBreak />
<Run>1234567890</Run>
<LineBreak />
<Run>1234567890</Run>
</Paragraph>
</Section>
MSDN Silverlight TextPointer Class頁
符號 - 對於TextPointer操作,任何被認爲是下面的是一個符號:
用於TextElement的元件的開啓或關閉標記。
包含在InlineUIContainer內的的UIElement元素。請注意,UIElement始終只計爲一個符號。任何額外的 內容或由UIElement包含的元素不被視爲 符號。
文本Run元素內部的每個16位Unicode字符。
我想我需要「知道」什麼樣的「符號」的,我目前卻無法弄清楚如何。
好像應該很容易,但TextPointers工作看起來很直觀。 我有一個想法來解析Xaml來找到光標位置,但這似乎是一個真正的黑客。
任何幫助,將不勝感激。
感謝
你有沒有找到一個很好的解決方案呢? – 2013-04-04 04:39:42
爲你添加了一個答案。 – 2013-04-05 08:42:42