2010-12-06 27 views

回答

0

你需要的是一个值转换器,即IValueConverter的实现。在此blog article中,您可以找到可用于您的任务的StringToObjectConverter的代码。我会在这里重现代码: -

using System; 
using System.Windows; 
using System.Windows.Data; 
using System.Linq; 
using System.Windows.Markup; 

namespace SilverlightApplication1 
{ 
    [ContentProperty("Items")] 
    public class StringToObjectConverter : IValueConverter 
    { 
     public ResourceDictionary Items { get; set; } 
     public string DefaultKey { get; set; } 

     public StringToObjectConverter() 
     { 
      DefaultKey = "__default__"; 
     } 

     public virtual object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) 
     { 
      if (value != null && Items.Contains(value.ToString())) 
       return Items[value.ToString()]; 
      else 
       return Items[DefaultKey]; 
     } 

     public virtual object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) 
     { 
      return Items.FirstOrDefault(kvp => value.Equals(kvp.Value)).Key; 
     } 
    } 
} 

现在你可以在你这个转换器的实例添加到您的资源,用户控件: -

<UserControl.Resources> 
    <local:StringToObjectConverter x:Key="StatusToBrush"> 
     <ResourceDictionary> 
      <SolidColorBrush Color="Red" x:Key="0" /> 
      <SolidColorBrush Color="Green" x:Key="1" /> 
      <SolidColorBrush Color="Silver" x:Key="__default__" /> 
     </ResourceDictionary> 
    </local:StringToObjectConverter> 
</UserControl> 

现在您可以Background绑定到您的价值: -

<Button Background="{Binding Value, Converter={StaticResource StatusToBrush}}"> 
    <TextBlock Text="{Binding Value}" /> 
</Button>