c# - 如何在 wpf 应用程序中创建键盘输入?

标签 c# wpf visual-studio-2010 keyboard

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

我的问题是:如何让用户在写完答案后,只需按 Enter 键即可提交响应?

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

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

            doSomething();
        }
    }

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

最佳答案

如果您想确保窗口处理每次 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;
    }

我建议您阅读this article关于 WPF 事件的基本气泡、隧道和直接事件。

关于c# - 如何在 wpf 应用程序中创建键盘输入?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31220870/

相关文章:

c# - mongo.linq 与 c# linq 之间的区别

c# - 文本框水印

c# - 如何在Unity3D中使用参数更新Tweener?

c# - 基于字符串值创建实例

c# - 上下文菜单中的命令不起作用

c# - 渲染和打印 HTML 到非默认打印机

c++ - 如何在Visual Studio 2010中使用Boost

c# - 我可以代理现有的 Visual Studio LanguageService 吗?

c# - 我如何检测当前系统是什么语言

c# - 在 ComboBox DataTemplate 中获取 TextBlock 的值