2009-12-16 4 views
1

Je veux être en mesure d'avoir un modèle de style générique qui peut changer les couleurs de mes boîtes de texte en fonction d'un booléen. Mais je ne veux pas avoir à créer un style unique pour chaque zone de texte. Comment puis-je faire cela?XAML - Style de zone de texte générique avec déclencheurs/paramètres?

J'ai mis quelques exemples de code ci-dessous comment je pourrais m'attendre à ce que cela fonctionne. Trois zones de texte, toutes avec des liaisons différentes mais essayant d'utiliser le même modèle pour sélectionner la couleur rouge ou verte basée sur un booléen.

Merci

<TextBlock Text="{Binding Text1}" Style={DynamicResource MyTextBoxTemplate} DataContext="{Binding MyBool1}" /> 
<TextBlock Text="{Binding Text2}" Style={DynamicResource MyTextBoxTemplate} DataContext="{Binding MyBool2}" /> 
<TextBlock Text="{Binding Text3}" Style={DynamicResource MyTextBoxTemplate} DataContext="{Binding MyBool3}" /> 

      <Style x:Key="MyTextBoxTemplate" TargetType="TextBlock"> 
       <Style.Triggers> 
        <DataTrigger Value="True" Binding="{Binding ???}"> 
         <Setter Property="Foreground" Value="Green" /> 
        </DataTrigger> 
        <DataTrigger Value="False" Binding="{Binding ???}"> 
         <Setter Property="Foreground" Value="Red" /> 
        </DataTrigger> 
       </Style.Triggers> 
      </Style> 

Répondre

1

Vous pouvez utiliser la propriété de Tag TextBox

<TextBlock Text="{Binding Text1}" Style={DynamicResource MyTextBoxTemplate} Tag="{Binding MyBool1}" /> 
<TextBlock Text="{Binding Text2}" Style={DynamicResource MyTextBoxTemplate} Tag="{Binding MyBool2}" /> 
<TextBlock Text="{Binding Text3}" Style={DynamicResource MyTextBoxTemplate} Tag="{Binding MyBool3}" /> 

<Style x:Key="MyTextBoxTemplate" TargetType="TextBlock"> 
    <Style.Triggers> 
     <Trigger Property="Tag" Value="True"> 
      <Setter Property="Foreground" Value="Green" /> 
     </Trigger> 
     <Trigger Property="Tag" Value="False"> 
      <Setter Property="Foreground" Value="Red" /> 
     </Trigger> 
    </Style.Triggers> 
</Style> 
+0

Génial, merci! – Chris

1

Vous pouvez également utiliser une propriété attachée pour qu'au lieu de Tag.