2009-09-22 4 views
1

Je veux faire ce qui suit:comment modifier l'état visuel d'un contrôle WPF basé sur l'évaluation d'autres éléments visuels?

<TextBlock Text="{Binding Result}"> 

Je veux colorier ce basé sur une vérification de l'égalité sur le résultat, ce qui est le point de vue façon centrée de le faire? Je me souviens avoir lu sur le sélecteur de modèles, est-ce le bon choix ici?

exemple:

Text="Pass" Color="Green" 
Text="Fail" Color="Red" 

Je voudrais que ce soit dynamique afin que si le texte le change est réévalué.

Répondre

3

Vous pouvez utiliser des déclencheurs dans un style:

<TextBlock Text="{Binding Result}"> 
    <TextBlock.Style> 
     <Style TargetType="TextBlock"> 
      <Style.Triggers> 
       <DataTrigger Binding="{Binding Result}" Value="Pass"> 
        <Setter Property="Foreground" Value="Green" /> 
       </DataTrigger> 

       <DataTrigger Binding="{Binding Result}" Value="Fail"> 
        <Setter Property="Foreground" Value="Red" /> 
       </DataTrigger> 
      </Style.Triggers> 
     </Style> 
    </TextBlock.Style> 
</TextBlock> 

Sinon, vous pouvez créer une implémentation IValueConverter qui convertit les chaînes à brosses (selon vos règles) et on utilise une liaison directe:

<TextBlock 
    Text="{Binding Result}" 
    Foreground="{Binding Result,Converter={StaticResource my:ResultBrushConverter}} /> 

Je n'entrerai pas dans les détails pour cette option car je pense que l'option pure-XAML est la meilleure solution.

+0

L'approche de déclenchement est intéressante, je vais commencer à le faire comme ça. Y a-t-il un inconvénient par rapport à l'approche du convertisseur? – Carlo

+0

Un convertisseur serait un peu plus flexible puisqu'il est basé sur le code. Par exemple, si vous deviez changer la couleur en fonction d'un motif Regex dans le texte, un convertisseur rendrait cela possible. –