如何在MVVM中模拟用户按下ENTER键时的TAB键按下事件?(针对Silverlight技术)

3

在Silverlight项目中,如何通过MVVM模式模拟按键操作?

当用户按下回车键时,我希望可以模拟TAB键的按下,以便跳转到下一个文本框。


你不能依赖于模拟按键而不是命令吗?你实际上的需求是什么? - Steve B
2个回答

1

简单地处理KeyUp事件,您可以检查按下了哪个键。 然后,调用下一个控件的Focus方法。 不要忘记将Handled属性设置为true

示例代码:

// Handler for TextBox1
private void OnKeyDownHandler(object sender, KeyEventArgs e)
{
    if (e.Key == Key.Return)
    {
        TextBox2.Focus();
        e.Handled = true;
    }
}

您还可以考虑迭代所有控件,使用TabIndex属性查找下一个可聚焦元素。

您甚至可以将所有内容包装在可附加的行为中,以简化连接过程。


不错的解决方案,但我使用MVVM。我想尽一切办法避免在UI元素中硬编码代码。 - Rumplin
我不知道你在最后一条评论中的意思是什么。 - Rumplin
EventToCommand是一种行为,可以在特定事件发生时触发ICommand。例如:KeyDown事件可以触发VM的KeyInputCommand。请参阅此文章:http://mvvmlight.codeplex.com/SourceControl/changeset/view/a926e36786ed#GalaSoft.MvvmLight%2fGalaSoft.MvvmLight.Extras%20%28NET35%29%2fCommand%2fEventToCommand.cs - Steve B
我仍然不明白这会如何使我移动到下一个文本框。在我的视图模型中调用命令并不能解决任何问题,我仍然需要在XAML中为每个文本框硬编码名称... - Rumplin
1
问题相关:https://dev59.com/50nSa4cB1Zd3GeqPLSEt=_. 我已经找到了一个简单的解决方案,这里是:https://gist.github.com/4576803 - Jone Polvora

1

这取决于你在这里想要实现什么?如果你只是想执行与按键触发相同的代码,那么只需构建你的代码以允许此操作即可!

对于 UI 控件的自动化、模拟键盘和鼠标事件,请参阅 MSDN:

Silverlight 自定义控件的 UI 自动化


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接