【发布时间】: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