2010-10-18 6 views
7

J'ai un TextBox qui est défini par un ControlTemplate. En raison de ControlTemplate, le TextBox n'est plus automatiquement grisé lorsque la propriété IsEnabled est définie sur false.BackgroundColor d'un TextBox désactivé

Pour fournir cette fonctionnalité, j'utiliser le déclencheur suivant dans le ControlTemplate:

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

Cela fonctionne très bien. Cependant, je dois également définir BackgroundColor mais je n'ai pas trouvé d'entrée correspondante dans SystemColors. Quelle entrée est la bonne entrée pour l'arrière-plan des contrôles désactivés (TextBoxes)? Y a-t-il une autre source que SystemColors?

Je ne souhaite pas utiliser de valeur fixe. par exemple. Background="#f4f4f4", parce que je crains que dans certains environnements, l'arrière-plan désactivé ait une autre valeur et que mon contrôle ne soit pas comme il devrait ou même illisible (si par exemple la valeur de GrayTextBrush est proche de # f4).

Répondre

14

La question StackOverflow suivante peut aider:

Visual guide to System.Windows.SystemColors

Edit:

J'ai fait quelques sleuthing supplémentaires et ont examiné les styles standard XAML fournis par Microsoft (voir Where can I download Microsoft's standard WPF themes from?). Vous pouvez voir exactement quelles valeurs SystemColors sont utilisées pour divers contrôles.

Par exemple, voici un extrait du modèle de commande pour ComboBox:

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

Microsoft utilise SystemColors.ControlBrushKey comme la couleur de fond d'un ComboBox désactivé.

+0

+1 Merci. Poste intéressant, cependant la réponse à ma question que je n'ai pas trouvée. Ai-je manqué quelque chose? – HCL

+0

Au lieu d'utiliser une valeur fixe pour votre arrière-plan, vous souhaitez utiliser une valeur SystemColors, correct? En regardant les styles XAML par défaut, il apparaît que Microsoft utilise la valeur SystemColors.ControlBrushKey comme couleur d'arrière-plan pour les contrôles qui sont désactivés. Cette couleur devrait contraster avec SystemColors.GrayTextBrush, de sorte que l'utilisateur sera capable de lire la valeur lorsque le contrôle est désactivé. –

+2

+1 pour une bonne réponse. Notez l'utilisation de DynamicResource pour que l'application change automatiquement la couleur si l'utilisateur change la couleur dans le thème Windows, pendant que l'application est en cours d'exécution. –

0

La valeur hexadécimale pour Win7 aero SystemColors.ControlBrushKey est F0F0F0. Non F4F4F4. Alors que ce n'est pas correct, je ne sais pas lequel utiliser, donc je vais utiliser F4F4F4.

Questions connexes