2015-08-15 69 views
4

我使用AvalonEdit作爲我的TextEditor,並且在從Key_Down按鈕調用CodeCompletionWindow時沒有顯示數據,但是當作爲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

得到了答案。在KeyDown事件處理程序中添加了e.Handled = true。

工作代碼。

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