在Silverlight中按下文本框上的Enter键

10

我正在开发一款 Silverlight 应用程序,需要在文本框中输入信息,然后只需按下回车键。但是,我没有找到 onclick 事件,所以我使用了 onkeypressup 事件,并检查是否按下了回车键,如果是,则执行“blah”。

感觉好像还有更好的方法。所以问题是,有吗?

5个回答

12

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

另外,如果您使用KeyDown事件而不是KeyUp事件,则代码将更易读。

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

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


使用事件冒泡是一个好主意!我的关于SL的书中,冒泡事件是沿着包含层次结构向上传播的事件。例如,MouseLeftButtonDown是一个冒泡事件。它首先由被点击的元素引发。接下来,它由该元素的父级引发,然后由该元素的父级引发,以此类推,直到Silverlight到达元素树的顶部。 - Christian Casutt
你能详细说明一下“如果使用KeyDown事件而不是KeyUp事件,代码会更易读”这句话的意思吗? - Ralph Shillington

6

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


我从未想过,但它完美地运作了。我在一个用户控件中有一个文本框,并仅将其附加到用户控件的KeyUp事件。这是在尝试让用户控件创建单独的自定义事件之后的事情。 - rob

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);
        }
    }

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);
    }
}

当您按下回车键时,文本框的数据源不会更新,命令使用的是旧值。因此,在执行命令之前,您必须调用UpdateSource。
当然,您可以在比文本框更高的级别上捕获事件。

0

嗯,我对Silverlight还比较陌生,我为一个具有一个DependencyProperty Button的按钮创建了HitEnter行为。

然后我手动在代码中连接Button和Behavior,当按下回车键时,我会调用按钮上的命令。


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