2015-08-15 2 views
4

Я использую AvalonEdit в качестве моего TextEditor и не показываю данные в CodeCompletionWindow, когда он вызывается из кнопки Key_Down, однако все работает отлично, когда обрабатывается как событие Text_Entered. Ниже приведен пример кодаAvalonEdit не показывает данные в CompletionWindow для события KeyDown

[Serializable] 
public class CodeEditor : TextEditor 
{ 
    public CompletionWindow CompletionWindow = null; 
    public CodeEditor() 
    { 
     //CompletionWindow pops up without any data. 
     this.TextArea.KeyDown += TextArea_KeyDown; 
     //CompletionWindow pops up and data is displayed. 
     this.TextArea.TextEntered += this.OnTextEntered; 
    } 

    void TextArea_KeyDown(object sender, KeyEventArgs e) 
    { 
     if (e.Key == Key.Space && (Keyboard.Modifiers & ModifierKeys.Control) == ModifierKeys.Control) 
     { 
      ShowCompletion(""); 
     } 
    } 

    void OnTextEntered(object sender, TextCompositionEventArgs e) 
    { 
     //e.Handled = true; 

     if (e.Text == "\n" || e.Text == "\t" || e.Text == " ") 
     { 
      return; 
     } 

     this.ShowCompletion(e.Text); 
    } 

    private void ShowCompletion(string enteredText) 
    { 
     CompletionWindow = new CompletionWindow(TextArea); 
     IList<ICompletionData> data = CompletionWindow.CompletionList.CompletionData; 
     data.Add("ABC"); 
     CompletionWindow.Show(); 
     CompletionWindow.Closed += delegate 
     { 
      CompletionWindow = null; 
     }; 
    } 
} 

ответ

3

Получил ответ. Добавлен e.Handled = true в обработчике событий KeyDown.

Рабочий код.

void TextArea_KeyDown(object sender, KeyEventArgs e) 
{ 
    if (e.Key == Key.Space && (Keyboard.Modifiers & ModifierKeys.Control) == ModifierKeys.Control) 
    { 
     ShowCompletion(""); 
     e.Handled = true; 
    } 
}