2010-10-18 83 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。