0

TLDR: テキストボックスは、タッチ入力で手動で選択すると前景色と背景色を適切に更新しますが、作成後に Textbox.Focus() メソッドを使用すると更新に失敗します。

 

質問はこれに似ています-Windows Phone-テキストボックスの背景

My Application は、関連付けられた GotFocus イベントを使用してテキスト ボックスを作成します。これにより、テキスト ボックスがフォーカスを受け取るたびに、テキスト ボックスの前景色と背景色がシステムの既定値に変更されます。ユーザーがキーパッドの Enter キーを押すと、アプリは最初のテキスト ボックスの下に別の同一のテキスト ボックスを生成します。

問題は、これらのテキストボックスのいずれかで、テキストボックスを手動で押すと、すべてが正常に機能し、テキストボックスが意図したとおりに表示されることです。ただし、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 に答える