2010-11-04 4 views

Répondre

2

vous avez une vue de modèle (implémentant INotifyPropertyChanged) qui a le texte en tant que propriété et la couleur de premier plan en tant que propriété, le bloc de texte lie ces deux propriétés à la vue modèle. la propriété color peut dépendre de la propriété text.

+1

Je pense que vous constaterez que cette approche est beaucoup plus flexible et testable que l'approche déclencheur/convertisseur. –

4

Si vous voulez avoir la possibilité de faire quelque chose de malin, comme mapper dynamiquement des textes sur des couleurs, etc., vous pouvez utiliser une classe Converter. Je suppose que le texte est mis à se lier à quelque chose, vous pouvez lier à la même chose au premier plan, mais par un convertisseur de mesure:

<TextBlock Text="{Binding Path=Foo}" 
      Foreground="{Binding Path=Foo, Converter={StaticResource myConverter}" /> 

serait défini Votre convertisseur quelque chose comme ceci:

public class ColorConverter : IValueConverter 
{ 
    public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) 
    { 
     string text = (string)value; 
     switch (text) 
     { 
      case "Mike": 
       return Colors.Red; 
      case "John": 
       return Colors.Blue; 
      default: 
       return Colors.Black; 
     } 
    } 

    public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) 
    { 
     return null; 
    } 
} 

Évidemment, au lieu de l'instruction switch simple, vous pourriez avoir une logique plus intelligente pour gérer de nouvelles valeurs et autres.

+2

Voulez ajouter: Si vous n'utilisez pas de ressources statiques, la valeur renvoyée dans le convertisseur doit être: 'new SolidColorBrush (Colors.Red)' pour lier correctement la valeur du champ. – Fragment

Questions connexes