2015-08-15 3 views
4

J'utilise AvalonEdit comme TextEditor et n'affiche pas les données dans le CodeCompletionWindow lorsqu'il est appelé à partir du bouton Key_Down, mais tout fonctionne correctement lorsqu'il est géré en tant qu'événement Text_Entered. Ci-dessous l'exemple de codeAvalonEdit n'affiche pas les données dans l'événement CompletionWindow for 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; 
     }; 
    } 
} 

Répondre

3

Vous avez obtenu la réponse. Ajouté e.Handled = true dans KeyDown Event Handler.

Code de travail.

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