【问题标题】:Is there a way to programmatically cancel editing a text box?有没有办法以编程方式取消编辑文本框?
【发布时间】:2010-08-03 02:23:50
【问题描述】:

在我的 windows phone 7 应用程序中,我有一个单行文本框。当用户按下 {ENTER} 时,我想接受文本框值并将文本框切换回正常的非编辑模式。

基本上,有没有办法以编程方式取消编辑文本框?

我已经尝试强制视觉状态管理器进入正常模式,这确实改变了视觉风格,但文本框仍处于编辑模式,屏幕键盘仍在显示。

            VisualStateManager.GoToState(
                this.MyTextBox,
                "Normal",
                true);

            VisualStateManager.GoToState(
                this.MyTextBox,
                "Unfocused",
                true);

还尝试以编程方式选择父控件,但这似乎也不起作用。

我想我一定遗漏了一些简单的东西,一定有人做过一百万次 - 非常感谢任何帮助。

谢谢,

更新:我尝试将焦点设置到另一个控件,但这不起作用,SIP 键盘永远不会消失。

但我用另一种方法想通了。诀窍是使用 IsReadOnly 标志。当失去焦点或按下输入时,我将控件设置回只读以更新样式。我所要做的就是更新我的视觉样式,让它看起来正确,现在可以完美运行。

不管怎样,我的代码现在看起来像这样:

    private void MyTextBox_GotFocus(object sender, RoutedEventArgs e)
    {
        this.MyTextBox.IsReadOnly = false;
        this.MyTextBox.SelectAll();            
    }

    private void MyTextBox_LostFocus(object sender, RoutedEventArgs e)
    {
        this.MyTextBox.IsReadOnly = true;
    }

   private void MyTextBox_KeyUp(object sender, KeyEventArgs e)
    {
        if (e.Key == Key.Enter)
        {

           this.MyTextBox.IsReadOnly = true;
            VisualStateManager.GoToState(
                this.MyTextBox,
                "ReadOnly",
                true);
            VisualStateManager.GoToState(
                this.MyTextBox,
                "Unfocused",
                true);
            VisualStateManager.GoToState(
                this.MyTextBox,
                "Valid",
                true);
       }
   }

【问题讨论】:

    标签: silverlight silverlight-4.0 windows-phone-7


    【解决方案1】:

    两种选择:

    1. 在其他一些不相关的控件(可能是标签?)上调用 Focus()
    2. 禁用然后启用文本框(感觉很老套,但它有效)。

    【讨论】:

    • 我没有启用,而是使用了“IsReadOnly”——但同样的想法。谢谢!
    【解决方案2】:

    根据 Ben 的回答,我就是这样做的:

    private void SearchBox_KeyUp(object sender, KeyEventArgs e)
    {
      if (e.Key == Key.Enter && !String.IsNullOrEmpty(SearchBox.Text))
      {
        (sender as TextBox).IsEnabled = false;
        (sender as TextBox).IsEnabled = true;
    
        // Process search term here...
      }
    }
    

    【讨论】:

      猜你喜欢
      • 2016-10-11
      • 2017-11-26
      • 2014-06-18
      • 1970-01-01
      • 1970-01-01
      • 2010-09-25
      • 1970-01-01
      • 1970-01-01
      • 2020-05-02
      相关资源
      最近更新 更多