web-dev-qa-db-ja.com

WPF:ブラシをデフォルト/元の状態に戻す

私はWPFの完全な初心者です。

現在、エラーメッセージ用のラベル、テキストボックス、テキストブロックを含む「LabeledTextbox」と呼ばれるフォーム要素のユーザーコントロールを作成しています。

使用しているコードがエラーメッセージを追加するとき、テキストボックスの境界線を赤にしたいです。ただし、エラーメッセージが削除されたら、テキストボックスのデフォルトの境界線の色に戻したいと思います。これを行うには非常に簡単な方法があるに違いないと思います。

私のコード:

(パブリック部分クラスLabeledTextbox:UserControl)

public string ErrorMessage
{
    set
    {
        if (string.IsNullOrEmpty(value))
        {
            _textbox.BorderBrush = Brushes.Black; //How do I revert to the original color in the most elegant way?
        }
        else
        {
            _textbox.BorderBrush = Brushes.Red;
        }

        _errorMessage.Text = value;
    }
}
29
Thomas Stock

あなたが使うことができます

_textBox.ClearValue(TextBox.BorderBrushProperty);

これにより、直接割り当てられた値が削除され、スタイルまたはテンプレートで定義された値に戻ります。

45
Daniel

クラスからデフォルトの色を取得できますSystemColors

これがすべてのシステムカラーのリストです: http://msdn.Microsoft.com/de-de/library/system.windows .systemcolors.aspx

クライアント領域のデフォルト背景色

     _textbox.Background = SystemColors.WindowBrush;

クライアント領域内のデフォルトテキストの色

     _textbox.SystemColors.WindowTextBrush
11
Beauty

私はパーティーに遅れるかもしれませんが、将来の読者のために、この目的のために_Button.BackgroundProperty.DefaultMetadata.DefaultValue_を使用することもできます。これは、コンバーターを使用しているときに特に役立ちます。コンバーターを使用する必要がある場合は、値を返すであるため、ClearValue()呼び出しを使用できません。

3
dotNET

デフォルト設定を保存するだけです。ここにコードの例があります。

        System.Windows.Media.Brush save;

        private void Window_Loaded(object sender, RoutedEventArgs e)
                {
          //Store the default background 
        save = testButton.Background;

        }


        private void ChangeBackground(){

        testButton.Background = Brushes.Red;

        }

        private void restoreDefaultBackground(){

        //Restore default Backgroundcolor

        testButton.Background = save;

        }
0
Andreas

これは機能しますか? ClearValueメソッドを使用するよりも黒に設定する方が適切です

public string ErrorMessage
{
    set
    {
        if (string.IsNullOrEmpty(value))
        {
            _textbox.Background = Brushes.Black;
        }
        else
        {
            _textbox.Background = Brushes.Red;
        }

        _errorMessage.Text = value;
    }
}
0