Silverlight数据影响外观.. VisualStateManger ..颜色根据数据值

时间:2010-12-06 06:34:06

标签: silverlight triggers viewstate visualstatemanager

在Silverlight中,如何根据内容的值来改变按钮的颜色。 '0'=红色,'1'=绿色..

我看了一下VisualStateManger但看不到怎么做..我可以看到鼠标等很容易..但不是数据值。

1 个答案:

答案 0 :(得分: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>