如何在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();
}
}
我想我必须在其他地方添加一些代码,但我不确定我需要在哪里添加或添加什么。
如果你想确保你的窗口在每次按下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
。