Erstens ist der VisualStateManager der Ersatz für Trigger in Silverlight. Der VSM ist tatsächlich viel mächtiger als Trigger, da er es ermöglicht, ein StoryBoard auszuführen, wenn sich der Status ändert.
Wenn Sie in Ihrer Situation keine Animation benötigen, würde ich einen IValueConverter verwenden. Erstellen Sie im DataTemplate einen Rahmen, und binden Sie den Hintergrundpinsel an die Eigenschaft Ihres DataItems, die Sie zum Ändern des Hintergrundpinsels verwenden möchten.
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();
}
}
Dann würde Ihre XAML wie folgt aussehen:
<Border Background={Binding InterestingProperty,Converter={StaticResource BrushConverter}} />
Wenn Sie Animation benötigen, dann auf dem Visual lesen wollen Sie gehen. Im Wesentlichen erstellen Sie ein Template oder ein UserControl mit einer Abhängigkeitseigenschaft. Wenn diese Eigenschaft sich ändert, bestimmen Sie, in welchem Status sich das Steuerelement befinden soll, und rufen den visuellen Statusmanager auf. Die Syntax ist so etwas wie
VisualStateManager.GoToVisualState(yourControlInstance,"TheState",boolUseTransitions);
+1 Nahe genug zu verwenden. Sie müssen sicherstellen, dass der Wert null ist. Auch sein GoToState nicht GoToVisualState. – AnthonyWJones