Подтвердить что ты не робот

WPF: возврат кисти к стандартным/оригинальным

Я полный новичок в WPF.

В настоящий момент я создаю usercontrol для элементов формы, называемых LabeledTextbox, которые содержат метку, текстовое поле и текстовый блок для ошибок.

Когда код использования добавляет errormessage, я хочу поместить границу текстового поля в красный цвет. Но, когда ошибка errormessage будет удалена, я хотел бы вернуться к умолчанию bordercolor текстового поля. Я считаю, что должен быть очень простой способ сделать это.

Мой код:

(в публичном частичном классе 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;
    }
}
4b9b3361

Ответ 1

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

_textBox.ClearValue(TextBox.BorderBrushProperty);

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

Ответ 2

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

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

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

     _textbox.Background = SystemColors.WindowBrush;

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

     _textbox.SystemColors.WindowTextBrush

Ответ 3

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

Ответ 4

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

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

        _errorMessage.Text = value;
    }
}

Ответ 5

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

        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;

        }