2010-10-18 13 views
7

Tengo un TextBox que se define a través de ControlTemplate. Debido a ControlTemplate, el TextBox ya no se atenúa automáticamente cuando la propiedad IsEnabled se configura como falsa.BackgroundColor de un cuadro de texto deshabilitado

para proporcionar esta funcionalidad, uso el siguiente trigger dentro del ControlTemplate:

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

Esto funciona bien. Sin embargo, tengo que establecer también BackgroundColor pero no he encontrado una entrada correspondiente en SystemColors. ¿Qué entrada es la entrada correcta para el fondo de controles deshabilitados (TextBoxes)? ¿Hay otra fuente que SystemColors?

No quiero usar un valor fijo. p.ej. estableciendo Background="#f4f4f4", porque me temo que en algunos entornos, el fondo desactivado tiene otro valor y luego mi control no se ve como debería o incluso es ilegible (si, por ejemplo, el valor de GrayTextBrush está cerca de # f4).

Respuesta

14

La siguiente pregunta StackOverflow puede ayudar:

Visual guide to System.Windows.SystemColors

Editar:

hice algunas investigaciones adicionales y se veía en los estilos estándar XAML que ofrece Microsoft (ver Where can I download Microsoft's standard WPF themes from?). Puede ver exactamente qué valores de SystemColors se utilizan para varios controles.

Por ejemplo, aquí es un fragmento de la plantilla de control para ComboBox:

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

Microsoft utiliza SystemColors.ControlBrushKey como el color de fondo de un discapacitado ComboBox.

+0

+1 Gracias. Publicación interesante, sin embargo, la respuesta a mi pregunta no la he encontrado. ¿Me he perdido algo? – HCL

+0

En lugar de utilizar un valor fijo para su fondo, ¿desea utilizar un valor de Color del sistema, correcto? Al observar los estilos XAML predeterminados, parece que Microsoft usa el valor SystemColors.ControlBrushKey como color de fondo para los controles que están deshabilitados. Este color debe contrastar con SystemColors.GrayTextBrush, por lo que el usuario podrá leer el valor cuando el control esté deshabilitado. –

+2

+1 para una gran respuesta. Observe el uso de DynamicResource para que la aplicación cambie automáticamente el color si el usuario cambia el color en el tema de Windows, mientras la aplicación se está ejecutando. –

0

El valor hexadecimal para Win7 aero SystemColors.ControlBrushKey es F0F0F0. No F4F4F4. Entonces ese no es correcto, no sé cuál usar, así que voy a usar F4F4F4.

Cuestiones relacionadas