使用键盘上的 Enter 键以及鼠标单击将按钮绑定到命令

发布于 2024-10-13 09:28:57 字数 222 浏览 5 评论 0原文

我有一个使用 MVVM Light 构建的 Silverkight 4 应用程序。我有各种带有按钮的视图,这些按钮绑定到视图模型中的命令。

一切工作正常,当您单击按钮时,命令会触发,并且无论调用什么都可以工作。

我想要改变的只是用户不必使用鼠标按下按钮来调用命令,我希望他们可以选择按键盘上的回车键。

我想很简单,但目前我陷入困境,无法找到任何有关如何完成此操作的信息。任何想法请。

I have a Silverlkight 4 application built with MVVM Light. I have various views with buttons on that are bound to commands in the viewmodels.

Everything works fine, when you click on a button, the command fires and whatever was called works.

All I want to change is instead of the user having to use to mouse to press the button to call the command I would like them to have the option of pressing return on the keyboard.

Simple I thought but at the moment I am stuck and cannot find any info of how to accomplish this. Any ideas please.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

南薇 2024-10-20 09:28:57

为什么不在控件上添加一个 KeyUp 事件 - 并在后面的代码中处理“Enter”键以在视图模型中触发该事件?

EG:

在 XAML 中:

......... KeyUp="Control_KeyUp" />

在后面的代码中:

private void Control_KeyUp(object sender, System.Windows.Input.KeyEventArgs e)
    {
        if(e.Key == System.Windows.Input.Key.Enter)
        {
            GlobalViewModelLocator.ViewModel.FireControlCommand(..);
        }
    }

其中 GlobalViewModelLocator 引用一个静态类,该类保存对视图中使用的视图模型的引用。

Why dont you add a KeyUp event on the control - and handle the "Enter" key in the code behind to fire off the event in the view model?

EG:

In XAML:

......... KeyUp="Control_KeyUp" />

In the CODE BEHIND:

private void Control_KeyUp(object sender, System.Windows.Input.KeyEventArgs e)
    {
        if(e.Key == System.Windows.Input.Key.Enter)
        {
            GlobalViewModelLocator.ViewModel.FireControlCommand(..);
        }
    }

Where GlobalViewModelLocator refers to a static class which holds references to the view models used in the views.

心欲静而疯不止 2024-10-20 09:28:57

谢谢维克斯的回复。我可以看到这是如何运作的。我已经使用后面的代码对其进行了排序。

在 xaml 中,我将 keydown 事件添加到我所在的控件的属性中,在我的例子中是一个网格,但可以是列表框、文本框或其他任何内容。

然后在后面的代码中我添加了

private void IfEnterIsPressed(object sender, KeyEventArgs e)
{
   if (e.Key == Key.Enter)
   { 
      var vm = DataContext as ViewModel; if (vm != null) vm.MyCommand.Execute(null); 
   }            
}

这对我有用

Thanks for the reply Vixen. I could see how this would work. I have already sorted it by using the code behind.

In the xaml I add a keydown event to the property of the control I was in which in my case was a grid but could be a listbox, textbox or whatever.

Then in the code behind I added

private void IfEnterIsPressed(object sender, KeyEventArgs e)
{
   if (e.Key == Key.Enter)
   { 
      var vm = DataContext as ViewModel; if (vm != null) vm.MyCommand.Execute(null); 
   }            
}

This worked for me

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文