我正在开发一个 Silverlight 应用程序,您需要在文本框中输入信息,然后按 Enter。好吧,我没有找到 onclick 事件,所以我所做的是使用 onkeypressup 事件并检查是否是按下的回车键,如果这样做“等等”。
只是感觉有更好的方法来做到这一点。那么问题来了,有吗?
我正在开发一个 Silverlight 应用程序,您需要在文本框中输入信息,然后按 Enter。好吧,我没有找到 onclick 事件,所以我所做的是使用 onkeypressup 事件并检查是否是按下的回车键,如果这样做“等等”。
只是感觉有更好的方法来做到这一点。那么问题来了,有吗?
我认为这是捕捉 Key.Enter 的方法。
此外,如果您使用 KeyDown 事件而不是 KeyUp 事件,您的代码将更具可读性。
如果您只关心为单个控件捕获 Key.Enter,那么您的方法是正确的。
您还可以通过使用其容器的 KeyDown 事件(“事件冒泡”)来捕获一组相关控件的 Key.Enter。
你真的想要它在文本框中吗?我会在容器(例如 Grid、Canvas)上放置一个 onkeyup 处理程序,以便在表单上的任意位置按下按钮。
如果您想绑定 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);
}
}
使用命令模式时,我使用以下实现:
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。
当然,您可以在比文本框更高的级别上捕获事件。
好吧,我对 Silverlight 很陌生,我为具有一个 DependencyProperty 按钮的按钮创建了 HitEnter 行为。
然后我手动连接按钮和行为(在后面的代码中),然后当输入时我在按钮上输入命令。