如何在wpf应用程序中创建键盘输入

本文关键字:创建 键盘 输入 应用程序 wpf | 更新日期: 2023-09-27 18:00:58

我想用c#制作一个wpf应用程序,在屏幕上显示一些文本,用户应该在其中编写响应并按enter提交响应。我不想使用文本框,因为窗口中只有一行文本输入,而且我不希望用户必须单击才能选择文本框。我希望该应用程序是无鼠标的。

我的问题是:我该如何做到,当用户写出答案时,他们只需按enter键就可以提交响应?

我尝试了以下代码片段,我在微软的帮助网站上找到了:

private void OnKeyDownHandler(object sender, KeyEventArgs e)
    {
        if (e.Key == Key.Return)
        {
            doSomething();
        }
    }

我想我必须在其他地方添加一些代码,但我不确定我需要在哪里添加或添加什么。

如何在wpf应用程序中创建键盘输入

如果你想确保你的窗口在每次按下Enter键时都能处理,而不在乎关注什么控制,你可以使用PreviewKeyDown事件:

private void Window_PreviewKeyDown(object sender, KeyEventArgs e)
{
    if (e.Key == Key.Enter)
    {
        //Process user input
        e.Handled = true;
    }
} 

当然,如果你在做mvvm,你可以创建一个行为来封装事件处理程序:

 public class WindowBehavior : Behavior<Window>
    {
        protected override void OnAttached()
        {
            AssociatedObject.PreviewKeyDown += AssociatedObject_PreviewKeyDown;
        }
    private void AssociatedObject_PreviewKeyDown(object sender, KeyEventArgs e)
    {
        if (e.Key == Key.Enter)
        {
            MessageBox.Show("Enter from Window");
            e.Handled = true;
        }
    }
    protected override void OnDetaching()
    {
        AssociatedObject.PreviewKeyDown -= AssociatedObject_PreviewKeyDown;
    }

我建议您阅读这篇关于泡沫、隧道和WPF事件的直接事件的文章。

如果你有一个用于提交的按钮,你可以通过使用IsDefault=true轻松地将其设置为默认按钮(在这里写了一个关于执行此操作和取消转义的提示(

除此之外,你必须有地方写它(但你不想要一个文本框?你可以默认选择它,如果你没有焦点,也可以在其中打标签(,否则你可以按下键来"捕捉"Enter