【问题标题】:How do I create keyboard input in a wpf application?如何在 wpf 应用程序中创建键盘输入?
【发布时间】:2015-09-22 03:00:45
【问题描述】:

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

我的问题是:我如何做到这一点,以便当用户写下他们的答案后,他们只需按 Enter 键即可提交回复?

我已经尝试了我在微软帮助网站上找到的以下 sn-p 代码:

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

            doSomething();
        }
    }

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

【问题讨论】:

  • "我不想使用文本框,因为窗口中的文本输入只有一行"...那你用的是什么?
  • 可能是文本块或标签。但是再想一想,我可能会使用文本框,只要不小心按下鼠标不会取消选择文本框。
  • 但是,您是否要求用户在按回车键之前输入一些内容?
  • 是的,用户输入一个响应然后回车,然后出现一些新的文本等等。

标签: c# wpf visual-studio-2010 keyboard


【解决方案1】:

如果你想确保你的窗口处理每个 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 事件的基本气泡、隧道和直接事件。

【讨论】:

    【解决方案2】:

    如果您有一个用于提交的按钮,您可以使用IsDefault=true 轻松将其设置为默认值(写了一个关于这样做的提示以及取消转义here。)

    除此之外,您还必须在某个地方编写它(但您不想要一个文本框?您可以默认选择它,或者如果您没有焦点,则可以使用标签进入它),并且否则,您可以处理 keydown 以“捕获”Enter

    【讨论】:

    • "并且您可以处理 keydown 以“捕获” Enter 否则。"这是什么意思?
    • 您可以处理文本框上的键盘事件,并在按下回车时显示下一个问题。
    猜你喜欢
    • 2019-06-11
    • 1970-01-01
    • 2012-02-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-07-23
    相关资源
    最近更新 更多