2009-11-05 6 views
2

AllowTab 특성이 false로 설정된 경우 탭 문자를 WPF RichTextBox에 삽입하는 방법을 알아 내려고하고 있습니다.AllowTab이 false로 설정된 경우 WPF RichTextBox에 탭 삽입

이것을 허용하는 바로 가기 키가 있습니까? 차라리 도구 모음에 특수 단추를 추가하거나 사용자에게 복사하고 붙여 넣어야한다고 알려주는 대신에 ...

답변

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을 눌렀을 때 방송되지 않았기 때문에 (다른 키로 방송되었다) –

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; 

} 대답에 대한

관련 문제