首先,Silverlight 中触发器的替代品是 VisualStateManager。 VSM 实际上比触发器更强大,因为它允许您在状态更改时执行 StoryBoard。
如果您的情况不需要动画,我解决它的方法是使用 IValueConverter。在 DataTemplate 中创建一个 Border,并将背景画笔绑定到要用于更改背景画笔的 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}} />
如果您确实需要动画,那么您将需要阅读 VisualStateManager。本质上,您要做的就是创建具有依赖属性的模板化或用户控件,然后当该属性更改时确定控件应处于什么状态,并调用可视状态管理器。语法是这样的
VisualStateManager.GoToVisualState(yourControlInstance,"TheState",boolUseTransitions);