0

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 的东西基本上只是创建相关的文本框和所有相关的数据。我尝试在文本框之间切换焦点,禁用和启用指定的文本框和其他一些选项,并且始终唯一有效的方法不是通过代码将焦点放在文本框上,而是等待用户选择文本框,一些我不是很满意。尝试手动编辑样式也无济于事。

4

1 回答 1

0

我最终的解决方案是以非常短的间隔向应用程序添加一个计时器(足够短以使更改不可见),并在文本框获得焦点后更改文本框的颜色。

于 2013-02-19T23:22:22.350 回答