WPF自动完成框和回车键

A.R*_*.R. 7 wpf autocomplete

当我按下回车键时,我试图让WPF AutoCompleteBox引发KeyDown事件.我正在使用普通的KeyDown钩子,它适用于除了输入键之外的所有内容.有谁知道我怎么解决这个问题?

Jay*_*Jay 10

您可以继承AutoCompleteBox,为其添加事件Enter.

public class MyAutoCompleteBox : AutoCompleteBox
{
    public override void OnKeyDown(KeyEventArgs e)
    {
        base.OnKeyDown(e);
        if(e.Key == Key.Enter) RaiseEnterKeyDownEvent();
    }

    public event Action<object> EnterKeyDown;
    private void RaiseEnterKeyDownEvent()
    {
        var handler = EnterKeyDown;
        if(handler != null) handler(this);
    }
}
Run Code Online (Sandbox Code Playgroud)

在您的消费类中,您可以订阅:

public void Subscribe()
{
    autoCompleteBox.EnterKeyDown += DoSomethingWhenEnterPressed;
}

public void DoSomethingWhenEnterPressed(object sender)
{

}
Run Code Online (Sandbox Code Playgroud)


Eva*_*ans 9

答案很晚,但是我遇到了同样的问题,这个问题让我想到了这个问题,最后用PreviewKeyDown解决了这个问题

<wpftoolkit:AutoCompleteBox Name="AutoCompleteBoxCardName"  
     Populating="LoadAutocomplete"  
     PreviewKeyDown="AutoCompleteBoxName_PreviewKeyDown"/>
Run Code Online (Sandbox Code Playgroud)

private void AutoCompleteBoxName_PreviewKeyDown(object sender, KeyEventArgs e)
{
    if (e.Key == Key.Enter)
    {
        //...
    }
}
Run Code Online (Sandbox Code Playgroud)