2010-03-23 88 views
8

我想將插入符號4的位置移到我的脫字符當前位置的右側。我註冊了PreviewKeyDown,並調用InsertTextInRun()當TAB鍵被捕獲,像這樣:如何將插入符號移動到WPF RichTextBox中的某個位置?

private void rtb_PreviewKeyDown(object sender, KeyEventArgs e) 
{ 
    if (e.Key == Key.Tab) 
    { 
     rtb.CaretPosition.InsertTextInRun(" "); 
     e.Handled = true; 
    } 
} 

的問題是,插入符號調用InsertTextInRun()後留在地方。它不會不是移動到新文本的末尾,這是我想要的行爲。我將如何做到這一點?


順便說一句 - 是的,我知道在RichTextBoxAcceptsTab財產。我選擇忽略並且滾動我自己的選項卡功能,因爲與AcceptsTab掛鉤具有在後續行上縮進文本的令人討厭的副作用,即而不是我想要的。

回答

8

我剛碰到同樣的問題。看起來最後的插入位置取決於它在插入之前正在移動的方式。

下面的代碼可以確保(3.5SP1),其插入後,光標將插入文本的權利:

rtb.CaretPosition = rtb.CaretPosition.GetPositionAtOffset(0, LogicalDirection.Forward); 
rtb.CaretPosition.InsertTextInRun(text); 

注意插入符號的LogicalDirection屬性可能(並且已經到)被這個改變;僅僅創建正確的TextPointer是不夠的。

1

在CaretPosition TextPointer上使用GetInsertionPosition()方法。這將允許您在脫字符前插入文本。

private void rtb_PreviewKeyDown(object sender, KeyEventArgs e) 
{ 
    if (e.Key == Key.Tab) 
    { 
     rtb.CaretPosition.GetInsertionPosition(LogicalDirection.Backward).InsertTextInRun(" "); 
     e.Handled = true; 
    } 
} 
+0

哇,我一定錯過了!我會盡快給你一個嘗試,謝謝! :) – 2010-03-23 13:40:21

+1

對不起,沒有骰子。脫字符未移動到插入文本的末尾。 – 2010-03-24 01:42:28

+0

對我來說也沒有工作,只有解決方案是可行的解決方案。 – ToastyMallows 2013-06-26 22:27:14

1

爲了測試,你可以嘗試自己強迫運動:

rtb.CaretPosition = rtb.Document.ContentEnd; 

如果這樣的作品,你可能必須執行額外的邏輯情況下的標籤是不是在內容的末尾。

相關問題