我想在c#中创建一个wpf应用程序,在屏幕上显示一些文本,用户应该写一个响应,然后按Enter键提交响应。我不想使用文本框,因为窗口中的文本输入只有一行,我不希望用户必须单击以选择文本框。我希望应用程序没有鼠标。
我的问题是:我如何做到这一点,以便当用户写完答案时,他们只需按回车即可提交回复?
我尝试了以下在微软帮助网站上找到的代码片段:
private void OnKeyDownHandler(object sender, KeyEventArgs e)
{
if (e.Key == Key.Return)
{
doSomething();
}
}
我想我必须在别处添加一些代码,但我不确定我需要添加的位置或内容。
答案 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事件基本的泡沫,隧道和直接事件。