如何在回车键按下时激活按钮的Click命令?

时间:2011-11-10 16:17:31

标签: silverlight mvvm command prism login-control

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

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

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

我正在努力解决的问题是连接文本框,以便在用户点击后输入loginCommand执行。我做了很多谷歌搜索,似乎无法找到任何应​​对MVVM的答案。

我尝试将KeyDown事件处理程序添加到控件所在的stackpanel中。但是从我背后的代码中我唯一可以实现的是将焦点设置为按钮。

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

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

非常感谢 詹姆斯

4 个答案:

答案 0 :(得分:3)

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

ButtonAutomationPeer peer =
  new ButtonAutomationPeer( someButton );

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

invokeProv.Invoke();

答案 1 :(得分:0)

尝试使用参数(DependencyProperty)添加KeyDown事件的触发器 - 应该调用的命令。如果key为Key.Enter,则只需调用命令。

答案 2 :(得分:-1)

你能调用点击方法吗?例如,在你捕获Enter按钮的里面,“this.signInButton.Focus();”是,把“signInButton_Click(null,null);”直接触发按钮的单击方法。

答案 3 :(得分:-1)

您可以在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)或任何其他元素中。