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

时间:2015-07-04 12:55:10

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

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

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

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

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

            doSomething();
        }
    }

我想我必须在别处添加一些代码,但我不确定我需要添加的位置或内容。

2 个答案:

答案 0 :(得分:0)

如果您有一个用于提交的按钮,则可以使用IsDefault=true轻松将其设置为默认值(写下关于执行此操作的提示以及取消转义{{3 }}。)

除此之外,你必须有一个地方可以写它(但你不想要一个文本框?你可以默认选择它,或者如果你没有它,可以选择它那里的重点),你可以处理keydown" catch"否则为Enter

答案 1 :(得分:0)

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