2010-11-04 150 views

回答

2

您具有文本作爲屬性和前景色爲一個屬性模型視圖(實現INotifyPropertyChanged的),有文本塊結合這兩個屬性的模型圖。顏色屬性可以取決於文本屬性。

+1

我想你會發現,使用這種方法比觸發/轉換器的方法更加靈活和可測試性。 – 2010-11-04 18:51:57

4

如果你想靈活地做一些聰明的,比如動態文本映射到顏色等,你可以使用一個轉換器類。我假設的文本設置爲綁定的東西,你可以綁定到同一個東西在前臺,但通過自定義轉換器:

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

你的轉換器將被定義是這樣的:

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; 
    } 
} 

顯然,不是簡單的switch語句,你可以有更智能的邏輯來處理新的值等。

+2

想要添加:如果您不使用靜態資源,則轉換器中的返回值應爲:'新的SolidColorBrush(Colors.Red)'以正確綁定字段值。 – Fragment 2015-09-21 11:12:56