TLDR:当通过触摸输入手动选择时,我的文本框将正确更新其前景和背景颜色,但如果我在创建它们后使用 Textbox.Focus() 方法,则无法更新。
问题与此类似 - windows phone - textbox background
我的应用程序创建一个带有关联 GotFocus 事件的文本框,每当文本框获得焦点时,它将文本框的前景和背景颜色更改为系统默认值。当用户按下键盘上的回车键时,应用程序会在第一个文本框下方生成另一个相同的文本框。
问题在于,对于这些文本框中的任何一个,如果手动按下文本框,一切正常,并且文本框会按原样显示。但是,如果我在按下 Enter 键后使用 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 的东西基本上只是创建相关的文本框和所有相关的数据。我尝试在文本框之间切换焦点,禁用和启用指定的文本框和其他一些选项,并且始终唯一有效的方法不是通过代码将焦点放在文本框上,而是等待用户选择文本框,一些我不是很满意。尝试手动编辑样式也无济于事。