2010-10-18 85 views
7

我有一個通過ControlTemplate定義的文本框。由於ControlTemplate,當IsEnabled屬性設置爲false時,TextBox不會再自動變灰。禁用文本框的BackgroundColor

提供這種功能,我用下面的觸發控件模板中:

<Trigger Property="IsEnabled" Value="False">        
    <Setter Property="Foreground" Value="{x:Static SystemColors.GrayTextBrush}" /> 
</Trigger> 

這工作得很好。不過,我還必須設置BackgroundColor,但我沒有在SystemColors中找到相應的條目。哪個條目是禁用控件背景的正確條目(TextBoxes)?是否有另一個來源比SystemColors?

我不想使用固定值。例如設置爲Background="#f4f4f4",因爲我擔心在某些環境中,禁用背景有另一個值,然後我的控件看起來不應該如此,甚至不可讀(例如,如果GrayTextBrush的值接近#f4)。

回答

14

下面的StackOverflow問題可能會有所幫助:

Visual guide to System.Windows.SystemColors

編輯:

我做了一些額外的偵探,看着Microsoft提供的標準XAML樣式(見Where can I download Microsoft's standard WPF themes from?)。您可以準確查看哪些SystemColors值用於各種控件。

例如,這裏是控制模板用於ComboBox一個片段:

<Trigger Property="IsEnabled" Value="false"> 
    ... 
    <Setter 
     TargetName="Bd" 
     Property="Background" 
     Value="{DynamicResource {x:Static SystemColors.ControlBrushKey}}"/> 
    ... 
</Trigger> 

Microsoft使用SystemColors.ControlBrushKey作爲一個殘疾人ComboBox的背景色。

+0

+1謝謝。有趣的帖子,但我的問題的答案,我沒有找到。我錯過了什麼? – HCL 2010-11-16 16:37:56

+0

而不是爲您的背景使用固定值,您想要使用SystemColors值,是否正確?通過查看默認的XAML樣式,看起來Microsoft使用SystemColors.ControlBrushKey值作爲禁用控件的背景顏色。這種顏色應該與SystemColors.GrayTextBrush形成鮮明對比,因此用戶將能夠在禁用控件時讀取該值。 – 2010-11-16 16:57:03

+2

對於一個很好的答案+1。注意使用DynamicResource,以便在應用程序運行時,如果用戶更改Windows主題中的顏色,應用程序會自動更改顏色。 – 2012-12-13 11:29:38

0

Win7 aero SystemColors.ControlBrushKey的十六進制值爲F0F0F0。 不是F4F4F4。 因此,一個是不正確的,不知道使用哪個,所以我會用F4F4F4。