TLDR:我的文本框会在通过触摸输入手动选择时正确更新其前景色和背景色,但如果我在创建后使用Textbox.Focus()方法则无法更新。
问题与此类似 - windows phone - textbox background
我的应用程序创建一个带有相关GotFocus事件的文本框,只要文本框获得焦点,该事件就会将文本框的前景色和背景色更改为系统默认值。当用户按下键盘上的回车键时,应用程序会在第一个下方生成另一个相同的文本框。
问题在于,对于这些文本框中的任何一个,如果手动按下文本框,一切正常,文本框将显示其意图。但是,如果在按下回车键后使用TextBox.Focus(),虽然焦点传递到文本框,并且已处理GotFocus事件,但不会更新背景和前景颜色,而是在白色背景上留下白色文本。
我尝试在文本框之间多次传递焦点(最多10个),即使我可以确认焦点正在按原样传递,但只有当用户将焦点放在文本框(如果我通过代码将焦点放在文本框中,我必须手动取消选择然后重新选择它以应用颜色更改。如果我不通过代码给出焦点,我可以简单地选择它。)
这个代码是:
public void txtInputKeyUp(object sender, KeyEventArgs e)
{
TextBox txtBox = (TextBox)sender;
if (e.Key == Key.Enter)
{
Evaluate(txtBox);
InitializeDivider();
InitializeTextInput();
InitializeTextOutput();
txtInput[txtInput.Length - 1].Focus();
}
}
public void txtInputGotFocus(object sender, RoutedEventArgs e)
{
TextBox txtBox = (TextBox)sender;
if(txtBox.Text == "Input Here")
{
txtBox.Text = "";
}
txtBox.Foreground = (SolidColorBrush)App.Current.Resources["PhoneForegroundBrush"];
txtBox.Background = (SolidColorBrush)App.Current.Resources["PhoneBackgroundBrush"];
}
Initializeblabla的东西基本上只是创建相关的文本框和所有相关的数据。我已经尝试在文本框之间切换焦点,禁用和启用指定的文本框以及一些其他选项,并且始终唯一有效的方法是不通过代码将焦点放在文本框上,而是等待用户选择文本框,我真的不满意。尝试手动编辑样式也无济于事。
答案 0 :(得分:0)
我最终的解决方案是以非常短的间隔(足够短以使更改不可见)向应用添加计时器,并在文本框获得焦点后更改文本框的颜色。