10

我正在开发一个 Silverlight 应用程序,您需要在文本框中输入信息,然后按 Enter。好吧,我没有找到 onclick 事件,所以我所做的是使用 onkeypressup 事件并检查是否是按下的回车键,如果这样做“等等”。

只是感觉有更好的方法来做到这一点。那么问题来了,有吗?

4

5 回答 5

12

我认为这是捕捉 Key.Enter 的方法。

此外,如果您使用 KeyDown 事件而不是 KeyUp 事件,您的代码将更具可读性。

如果您只关心为单个控件捕获 Key.Enter,那么您的方法是正确的。

您还可以通过使用其容器的 KeyDown 事件(“事件冒泡”)来捕获一组相关控件的 Key.Enter。

于 2008-11-24T02:48:50.120 回答
6

你真的想要它在文本框中吗?我会在容器(例如 Grid、Canvas)上放置一个 onkeyup 处理程序,以便在表单上的任意位置按下按钮。

于 2008-11-23T21:06:26.410 回答
5

如果您想绑定 Command 属性而不是使用 Click 事件,这将起作用。首先为 Click 创建一个事件处理程序(见下文),然后在 KeyUp 中执行:

    private void MyTextBox_KeyUp(object sender, KeyEventArgs e)
    {
        if (e.Key == Key.Enter) SomeButton_Click(this, null);

    }

    private void SomeButton_Click(object sender, RoutedEventArgs e)
    {
        ICommand cmd = SomeButton.Command;
        if (cmd.CanExecute(null))
        {
            cmd.Execute(null);
        }
    }
于 2011-07-12T10:06:01.470 回答
1

使用命令模式时,我使用以下实现:

private void MyTextBox_KeyDown(object sender, KeyEventArgs e)
{
    if (e.Key == Key.Enter)
    {
        BindingExpression b = MyTextBox.GetBindingExpression(TextBox.TextProperty); 
        if (b != null)
            b.UpdateSource();

        ICommand cmd = SomeButton.Command;
        if (cmd.CanExecute(null))
            cmd.Execute(null);
    }
}

当您按 Enter 时,文本框的数据源不会更新,并且该命令使用旧值。因此,您必须在执行命令之前调用 UpdateSource。

当然,您可以在比文本框更高的级别上捕获事件。

于 2012-06-05T13:19:22.133 回答
0

好吧,我对 Silverlight 很陌生,我为具有一个 DependencyProperty 按钮的按钮创建了 HitEnter 行为。

然后我手动连接按钮和行为(在后面的代码中),然后当输入时我在按钮上输入命令。

于 2011-03-16T22:22:18.457 回答