【发布时间】:2008-11-23 20:33:55
【问题描述】:
我正在开发一个 Silverlight 应用程序,您需要在文本框中输入信息,然后按 Enter 键。嗯,没有 onclick 事件,我可以找到,所以我所做的是使用 onkeypressup 事件并检查是否是按下的回车键,如果是“等等”。
感觉好像有更好的方法来做到这一点。那么问题来了,有吗?
【问题讨论】:
标签: c# silverlight silverlight-2.0
我正在开发一个 Silverlight 应用程序,您需要在文本框中输入信息,然后按 Enter 键。嗯,没有 onclick 事件,我可以找到,所以我所做的是使用 onkeypressup 事件并检查是否是按下的回车键,如果是“等等”。
感觉好像有更好的方法来做到这一点。那么问题来了,有吗?
【问题讨论】:
标签: c# silverlight silverlight-2.0
我认为这是捕获 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 行为。
然后我手动连接按钮和行为(在后面的代码中),然后当按下回车键时,我在按钮上输入命令。
【讨论】: