Ответ 1
Вы можете использовать
_textBox.ClearValue(TextBox.BorderBrushProperty);
Это приведет к удалению непосредственно назначенного значения и вернется к значению, определенному стилем или шаблоном.
Я полный новичок в 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;
}
}
Вы можете использовать
_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()
.
Это работает? Установка его на черный лучше, чем использование метода ClearValue
public string ErrorMessage
{
set
{
if (string.IsNullOrEmpty(value))
{
_textbox.Background = Brushes.Black;
}
else
{
_textbox.Background = Brushes.Red;
}
_errorMessage.Text = value;
}
}
Просто сохраните настройки по умолчанию. Здесь приведен пример кода.
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;
}