2009-11-05 88 views

回答

6

好吧,最好的我可以想出到目前为止是拦截keydown事件后面的代码:

private void RichTextBox_KeyDown(object sender, KeyEventArgs e) 
{ 
    if (e.Key != Key.Tab || 
     (Keyboard.Modifiers & ModifierKeys.Control) != ModifierKeys.Control) 
       return; 

    var richTextBox = sender as RichTextBox; 
    if (richTextBox == null) return; 

    if (richTextBox.Selection.Text != string.Empty) 
     richTextBox.Selection.Text = string.Empty; 

    var caretPosition = richTextBox.CaretPosition.GetPositionAtOffset(0, 
          LogicalDirection.Forward); 

    richTextBox.CaretPosition.InsertTextInRun("\t"); 
    richTextBox.CaretPosition = caretPosition; 
    e.Handled = true; 
} 
+0

+1的答案,但是我不得不听PreviewKeyDown代替。 KeyDown事件在RichTextBox代码中的某处(我怀疑)被占用。因此,当我点击Tab(它与其他键一起广播时)从未广播过, – 2013-06-10 13:55:31

0

下面的代码适用于我。

private void RichTextBox_PreviewKeyDown(object sender, KeyEventArgs e) 
    { 
     if (e.Key != Key.Tab)  return; 
    var richTextBox = sender as RichTextBox; 
    if (richTextBox == null) return; 

if (richTextBox.Selection.Text != string.Empty) 
    richTextBox.Selection.Text = string.Empty; 

var caretPosition = richTextBox.CaretPosition.GetPositionAtOffset(0, 
         LogicalDirection.Forward); 

richTextBox.CaretPosition.InsertTextInRun("  "); 
richTextBox.CaretPosition = caretPosition; 
e.Handled = true; 

}

相关问题