WPF:将画笔恢复为默认/原始

Tho*_*ock 29 wpf user-controls default

我是WPF的新手.

目前我正在为名为"LabeledTextbox"的表单元素进行usercontrol,其中包含标签,文本框和错误消息的文本块.

当使用代码添加错误消息时,我想将文本框的边框设置为红色.但是,当错误消息被删除时,我想回到文本框的默认边框颜色.我觉得必须有一个非常简单的方法来做到这一点.

我的代码:

(在公共部分类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;
    }
}
Run Code Online (Sandbox Code Playgroud)

Dan*_*iel 46

你可以用

_textBox.ClearValue(TextBox.BorderBrushProperty);
Run Code Online (Sandbox Code Playgroud)

这将删除直接赋值,并返回样式或模板定义的值.

  • 万分谢意!*将依赖属性研究添加到待办事项列表中* (2认同)
  • 这不适合我.当我想提请注意时,我将背景设置为海蓝宝石.我试图使用ClearValue将其还原,但它仍然是海蓝宝石.看看这篇文章:(http://wpf.2000things.com/tag/clearvalue/)告诉我,ClearValue将其恢复为最后指定的值.所以我尝试将Background属性设置为Nothing并且它有效.标签背景现在是默认颜色. (2认同)

Bea*_*uty 11

您可以从SystemColors类中获取默认颜色

以下是所有系统颜色的列表:http: //msdn.microsoft.com/de-de/library/system.windows.systemcolors.aspx

客户区的默认背景颜色:

     _textbox.Background = SystemColors.WindowBrush;
Run Code Online (Sandbox Code Playgroud)

客户区内的默认文本颜色:

     _textbox.SystemColors.WindowTextBrush
Run Code Online (Sandbox Code Playgroud)


dot*_*NET 5

我可能会迟到,但对于未来的读者,你也可以用于Button.BackgroundProperty.DefaultMetadata.DefaultValue此目的。当您使用需要返回值并因此无法使用ClearValue()调用的转换器时,这尤其有用。