我正在开发一个silverlight应用程序,您需要将信息输入文本框,然后点击回车。好吧,没有onclick事件,我可以找到,所以我做的是使用onkeypressup事件并检查是否是按下的回车键,如果这样做“blah”。
感觉就像有更好的方法来做到这一点。所以问题是,有吗?
答案 0 :(得分:12)
我认为这是捕捉Key.Enter的方法。
此外,如果您使用KeyDown事件而不是KeyUp事件,您的代码将更具可读性。
如果您只关心捕获单个控件的Key.Enter,那么您的方法是正确的。
您还可以使用容器的KeyDown事件(“Event Bubbling”)捕获一组相关控件的Key.Enter。
答案 1 :(得分:6)
你真的想在文本框中使用它吗?我会在容器上放一个onkeyup处理程序(例如Grid,Canvas),按下表单上任意位置的按钮。
答案 2 :(得分:5)
如果您使用想要绑定Command属性而不是使用Click事件,这将有效。首先为Click创建一个事件处理程序(见下文),然后在KeyUp do:
中创建 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);
}
}
答案 3 :(得分: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。
当然,您可以在比文本框更高的级别上捕获事件。
答案 4 :(得分:0)
好吧,我是Silverlight的新手,我创建了一个具有一个DependencyProperty Button的按钮的HitEnter beahaviour。
我操纵连接按钮和行为(在后面的代码中)然后当输入被击中时我在按钮上输入命令。