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

wil*_*ill 5 silverlight silverlight-4.0 windows-phone-7

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

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

我已经尝试将视觉状态管理器强制进入正常模式,该模式确实改变了视觉样式,但文本框仍处于编辑模式,并且仍然显示屏幕键盘.

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

            VisualStateManager.GoToState(
                this.MyTextBox,
                "Unfocused",
                true);
Run Code Online (Sandbox Code Playgroud)

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

我想我必须错过一些简单的事情,有人必须做了一百万次 - 任何帮助都非常感激.

谢谢,

更新:我试图将焦点设置为另一个控件,但这不起作用,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);
       }
   }
Run Code Online (Sandbox Code Playgroud)

Ben*_*ood 3

两种选择:

  1. 对其他一些不相关的控件(也许是标签?)调用 Focus()
  2. 禁用然后启用文本框(感觉很hacky,但它有效)。