如何在Silverlight中创建类似WPF的数据触发器?

如何在Silverlight中创建类似WPF的数据触发器?,silverlight,xaml,datatrigger,Silverlight,Xaml,Datatrigger,如何为Silverlight datagrid创建触发器,其中单元格背景颜色根据单元格值发生变化? 前一段时间我在一个WPF项目上工作,我记得通过xaml中的DataTriggers这是非常简单的。然而,这个功能在Silverlight中似乎不可用,我一直不知道从哪里开始 谢谢大家。首先,Silverlight中触发器的替代品是VisualStateManager。VSM实际上比触发器强大得多,因为它允许您在状态改变时执行故事板 如果你不需要动画在你的情况下,我会解决它将使用一个IValueCo

如何为Silverlight datagrid创建触发器,其中单元格背景颜色根据单元格值发生变化? 前一段时间我在一个WPF项目上工作,我记得通过xaml中的DataTriggers这是非常简单的。然而,这个功能在Silverlight中似乎不可用,我一直不知道从哪里开始


谢谢大家。

首先,Silverlight中触发器的替代品是VisualStateManager。VSM实际上比触发器强大得多,因为它允许您在状态改变时执行故事板

如果你不需要动画在你的情况下,我会解决它将使用一个IValueConverter。在DataTemplate中创建边框,并将背景笔刷绑定到要用于更改背景笔刷的DataItem属性

    public class BrushConverter : IValueConverter
{
    public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
    {
       value.ToString() == "Red" ? new SolidColorBrush(Color.Red) : SolidColorBrush(Color.Blue);
    }

    public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
    {
        throw new NotImplementedExcpetion();
    }
}
然后,您的XAML将如下所示:

<Border Background={Binding InterestingProperty,Converter={StaticResource BrushConverter}} />

这是一个使用真笔刷和假笔刷的示例

公共类BoolToBrushConverter:DependencyObject,IValueConverter
{
公共对象转换(对象值、类型targetType、对象参数、CultureInfo区域性)
{
if(值为bool&(bool)值)
{
回刷;
}
返回假刷;
}
公共对象转换回(对象值、类型targetType、对象参数、CultureInfo区域性)
{
抛出新的NotImplementedException();
}
公共刷子
{
获取{return(画笔)GetValue(FalseBrushProperty);}
set{SetValue(属性,值);}
}
//使用DependencyProperty作为FalseBrush的后台存储。这将启用动画、样式、绑定等。。。
公共静态只读从属属性FalseBrush属性=
DependencyProperty.Register(“FalseBrush”、typeof(Brush)、typeof(BoolToBrushConverter)、new PropertyMetadata(null));
公共刷子
{
获取{return(Brush)GetValue(TrueBrushProperty);}
set{SetValue(TrueBrushProperty,value);}
}
//使用DependencyProperty作为TrueBrush的后台存储。这将启用动画、样式、绑定等。。。
公共静态只读从属属性TrueBushProperty=
Register(“TrueBrush”、typeof(Brush)、typeof(BoolToBrushConverter)、newpropertyMetadata(null));}
在XAML中

<UserControl.Resources>
    <converter:BoolToBrushConverter x:Key="enabledToBrushConverter"
               TrueBrush="White" FalseBrush="Gray" />
</UserControl.Resources> 

<TextBlock  Foreground="{Binding Element.IsEnabled,
  Converter={StaticResource enabledToBrushConverter}, ElementName= your_Element}"  />

+1足够近。您需要考虑值为null。它的GoToState也不是GoToVisualState。
<UserControl.Resources>
    <converter:BoolToBrushConverter x:Key="enabledToBrushConverter"
               TrueBrush="White" FalseBrush="Gray" />
</UserControl.Resources> 

<TextBlock  Foreground="{Binding Element.IsEnabled,
  Converter={StaticResource enabledToBrushConverter}, ElementName= your_Element}"  />