2009-08-20 72 views
27

我是WPF的一名完整新手。WPF:恢復筆刷爲默認/原創

目前我正在爲名爲「LabeledTextbox」的表單元素進行一個用戶控件,該表單包含一個標籤,一個文本框和一個用於errormessages的文本塊。

當使用代碼添加errormessage時,我想將文本框的邊框置爲紅色。但是,當errormessage被刪除時,我想回到文本框的默認bordercolor。 我覺得必須有一個非常簡單的方法來做到這一點。

我的代碼:

(公共部分類LabeledTextbox:用戶控件)

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; 
    } 
} 

回答

43

你可以使用

_textBox.ClearValue(TextBox.BorderBrushProperty); 

,將刪除直接分配的值,並返回到由樣式或模板定義的值。

+1

太好了,謝謝! *將dependencyproperty研究添加到待辦事項列表* – 2009-08-20 14:25:30

+0

非常感謝,非常有用的文章。我嘗試使用brush.clone方法存儲默認的筆刷,但是根據.net,系統默認不存在筆刷。謝謝! – JustinKaz 2010-05-27 16:34:33

+2

這對我不起作用。當我想要引起注意時,我將背景設置爲海藍寶石。我嘗試使用ClearValue將其還原回來,但仍保持爲海藍寶石。看看這篇文章:(http://wpf.2000things.com/tag/clearvalue/)告訴我,ClearValue將它恢復到最後指定的值。所以我試着將背景屬性設置爲Nothing,它工作。標籤背景現在是默認顏色。 – tolsen64 2015-04-09 17:27:04

0

這是行不通的嗎?將其設置爲黑色比使用ClearValue方法更好

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

     _errorMessage.Text = value; 
    } 
} 
+0

哦,對不起,我在我的文章中犯了一個錯誤。它並不是因爲默認是漸變顏色。 – 2009-08-20 14:37:53

+0

@托馬斯股票:0從未測試過它。所以也很抱歉。 – 2009-08-20 14:39:23

0

只存儲默認設置。這裏有一個代碼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; 

     } 
9

您可以從類搶默認顏色systemColors中

這裏是列表中的所有系統顏色http://msdn.microsoft.com/de-de/library/system.windows.systemcolors.aspx

默認客戶區域的背景顏色

 _textbox.Background = SystemColors.WindowBrush; 

默認客戶端區域內文本顏色

 _textbox.SystemColors.WindowTextBrush 
+1

這個答案在MVVM環境中很有用。在那裏,我無法清除BorderBrushProperty,就像Daniel在其他方面很好的答案一樣。但是通過在視圖模型的屬性中顯式地返回刷子來將控件的背景設置爲其默認畫筆作品。 – Julian 2016-07-25 15:44:29

3

我可能會遲到了,但對於未來的讀者,你也可以使用Button.BackgroundProperty.DefaultMetadata.DefaultValue用於此目的。當你使用轉換器時,這是特別有用的,你需要返回一個值,因此不能使用ClearValue()調用。