【问题标题】:How can I activate a button's Click command on Enter key press?如何在 Enter 按键上激活按钮的 Click 命令?
【发布时间】:2011-12-26 07:53:09
【问题描述】:

我正在使用 SL Prism 和使用 MVVM 的 MEF 开发应用程序。

我的登录页面当前包含一个用户名和密码文本框以及一个登录按钮。我的按钮代码如下:

<Button x:Name="signInButton" Content="Sign In" cal:Click.Command="{Binding loginCommand}"/>

我正在努力的是将文本框连接起来,这样如果用户点击输入,loginCommand 就会执行。我做了很多谷歌搜索,似乎找不到任何与 MVVM 相关的答案。

我尝试将 KeyDown 事件处理程序添加到控件所在的堆栈面板。然而,从后面的代码中,我唯一能做到的就是将焦点设置到按钮上。

private void StackPanel_KeyDown(object sender, KeyEventArgs e)
{
    if (e.Key == Key.Enter)
    {
        this.signInButton.Focus();
        e.Handled = true;
    } 
}

如何实现按回车键导致 loginCommand 执行的目标?

非常感谢 詹姆斯

【问题讨论】:

    标签: silverlight mvvm command prism login-control


    【解决方案1】:

    尝试使用参数(DependencyProperty)在KeyDown 事件上添加触发器 - 应该调用的命令。如果键是Key.Enter,那么只需调用命令。

    【讨论】:

      【解决方案2】:

      您可以在 xaml 中为特定命令添加 KeyBinding,如下所示:

       <Button Command="{Binding TestCommand}" Content="Test">
              <Button.InputBindings>
                  <KeyBinding Command="{Binding TestCommand}" Key="F2" />
              </Button.InputBindings>
          </Button>
      

      如果您的 Button 获得焦点,则 KeyBinding 可以这样工作。如果您希望您的 KeyBinding 在更大的范围内可用,您可以将 KeyBinding 添加到例如 Window ( Window.KeyBindings ) 或任何其他元素中。

      【讨论】:

      • Silverlight 中没有KeyBinding
      【解决方案3】:

      使用Automation Peer 类来按下它。然后,这将与您拥有的 MVVM ICommand 一起使用:

      ButtonAutomationPeer peer =
        new ButtonAutomationPeer( someButton );
      
      IInvokeProvider invokeProv =
        peer.GetPattern( PatternInterface.Invoke )
        as IInvokeProvider;
      
      invokeProv.Invoke();
      

      【讨论】:

        【解决方案4】:

        可以直接调用click方法吗?例如,在您捕获“this.signInButton.Focus();”的 Enter 按钮内就是,把“signInButton_Click(null, null);”直接触发按钮的点击方法。

        【讨论】:

        • 我认为您错过了示例中的 cal:Click.Command="{Binding loginCommand}" 位。他正在使用 MVVM ICommand 绑定而不是代码隐藏。没有signInButton_Click(null, null)可以拨打
        • @Basti:SLL 支持代码隐藏,就像您建议的 signInButton_Click(null, null) 一样,但是 MVVM 模式不赞成使用代码隐藏而不是绑定(数据和命令)。干杯
        猜你喜欢
        • 2019-05-19
        • 1970-01-01
        • 2011-08-31
        • 1970-01-01
        • 2019-04-06
        • 2015-03-27
        • 2012-01-07
        • 2012-09-21
        • 2012-02-04
        相关资源
        最近更新 更多