I'm a complete newbie at WPF.
At the moment I'm making a usercontrol for form elements called "LabeledTextbox" which contains a label, a textbox and a textblock for errormessages.
When the using code adds an errormessage, I want to put the border of the textbox in red. But, when the errormessage gets removed, I'd like to turn back to the default bordercolor of the textbox. I feel there must be a very easy way to do this.
My code:
(in public partial class 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;
}
}
You could use
_textBox.ClearValue(TextBox.BorderBrushProperty);
That will remove the directly assigned value and go back to the value defined by the style or template.
You can grab the default colours from the class SystemColors
Here is the list of all system colours: http://msdn.microsoft.com/de-de/library/system.windows.systemcolors.aspx
Default background colour of the client area:
_textbox.Background = SystemColors.WindowBrush;
Default text colour inside the client area:
_textbox.SystemColors.WindowTextBrush
I may be late to the party, but for future readers, you can also use Button.BackgroundProperty.DefaultMetadata.DefaultValue
for this purpose. This is especially useful when you're using a Converter where you need to return a value and therefore cannot use ClearValue()
call.
Does this work? Setting it to black is better than using the ClearValue method
public string ErrorMessage
{
set
{
if (string.IsNullOrEmpty(value))
{
_textbox.Background = Brushes.Black;
}
else
{
_textbox.Background = Brushes.Red;
}
_errorMessage.Text = value;
}
}
Just store the default settings. Here a code excample.
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;
}
来源:https://stackoverflow.com/questions/1306499/wpf-reverting-brush-to-default-original