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;
}
}
5 ответов
Вы могли бы использовать
_textBox.ClearValue(TextBox.BorderBrushProperty);
Это удалит непосредственно назначенное значение и вернется к значению, определенному стилем или шаблоном.
Вы можете получить цвета по умолчанию из класса SystemColors
Вот список всех системных цветов: http://msdn.microsoft.com/de-de/library/system.windows.systemcolors.aspx
Цвет фона по умолчанию для клиентской области:
_textbox.Background = SystemColors.WindowBrush;
Цвет текста по умолчанию внутри клиентской области:
_textbox.SystemColors.WindowTextBrush
Я могу опоздать на вечеринку, но для будущих читателей, вы также можете использовать Button.BackgroundProperty.DefaultMetadata.DefaultValue
для этого. Это особенно полезно, когда вы используете конвертер, в котором вам нужно вернуть значение и, следовательно, вы не можете использовать ClearValue()
вызов.
Просто сохраните настройки по умолчанию. Вот пример кода.
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;
}
Это работает? Установка черного цвета лучше, чем использование метода ClearValue
public string ErrorMessage
{
set
{
if (string.IsNullOrEmpty(value))
{
_textbox.Background = Brushes.Black;
}
else
{
_textbox.Background = Brushes.Red;
}
_errorMessage.Text = value;
}
}