【问题标题】:Pressing Enter on TextBox in Silverlight在 Silverlight 中的 TextBox 上按 Enter
【发布时间】:2008-11-23 20:33:55
【问题描述】:

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

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

【问题讨论】:

    标签: c# silverlight silverlight-2.0


    【解决方案1】:

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

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

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

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

    【讨论】:

    • 使用事件冒泡是个好主意!我关于 SL 的书:冒泡事件是向上传播的事件。例如,MouseLeftButtonDown 是一个冒泡事件。它首先由单击的元素引发。接下来,它由该元素的父级引发,然后由该元素的父级引发,以此类推,直到 Silverlight 到达元素树的顶部。
    • 您能否详细说明“如果您使用 KeyDown 事件而不是 KeyUp 事件更具可读性”?
    【解决方案2】:

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

    【讨论】:

    • 我从来没有想过这一点,但它工作得很好。我在 UserControl 中有 TextBox,并且只是附加到 UserControl 的 KeyUp 事件中。这是在尝试让 UserControl 创建单独的自定义事件之后。
    【解决方案3】:

    如果您想绑定 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);
            }
        }
    

    【讨论】:

      【解决方案4】:

      我在使用命令模式时使用如下实现:

      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。

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

      【讨论】:

        【解决方案5】:

        好吧,我是 Silverlight 的新手,我为具有一个 DependencyProperty 按钮的按钮创建了 HitEnter 行为。

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

        【讨论】:

          猜你喜欢
          • 2021-12-20
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2012-09-15
          • 1970-01-01
          • 2023-04-06
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多