WPF: возврат кисти по умолчанию / оригинал - PullRequest
28 голосов
/ 20 августа 2009

Я полный новичок в 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;
    }
}

Ответы [ 5 ]

45 голосов
/ 20 августа 2009

Вы можете использовать

_textBox.ClearValue(TextBox.BorderBrushProperty);

Это удалит непосредственно назначенное значение и вернется к значению, определенному стилем или шаблоном.

10 голосов
/ 05 октября 2011

Вы можете получить цвета по умолчанию из класса SystemColors

Вот список всех системных цветов : http://msdn.microsoft.com/de-de/library/system.windows.systemcolors.aspx

По умолчанию цвет фона клиентской области:

     _textbox.Background = SystemColors.WindowBrush;

По умолчанию цвет текста внутри клиентской области:

     _textbox.SystemColors.WindowTextBrush
3 голосов
/ 20 августа 2015

Я могу опоздать на вечеринку, но для будущих читателей вы также можете использовать Button.BackgroundProperty.DefaultMetadata.DefaultValue для этой цели. Это особенно полезно, когда вы используете конвертер, в котором вам нужно вернуть значение и, следовательно, вы не можете использовать ClearValue() call.

0 голосов
/ 30 мая 2011

Просто сохраните настройки по умолчанию. Вот пример кода.

        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 голосов
/ 20 августа 2009

Это работает? Установка черного цвета лучше, чем использование метода ClearValue

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

        _errorMessage.Text = value;
    }
}
...