5 Stimmen

Wie animiere ich eine Ressource in XAML?

In einem XAML-Dokument habe ich einen Gradienten-Pinsel als Ressource und eine Reihe von Formen, die diese Ressource verwenden. Ich möchte den Pinsel mit einem Storyboard animieren, weiß aber nicht, wie ich den Pinsel in den Ressourcen als Ziel des Storyboards festlegen soll. Einfach nur seinen Namen zu verwenden funktioniert nicht, {StaticResource name} funktioniert auch nicht. Ist das überhaupt möglich?

Ich bevorzuge eine XAML-only-Lösung, aber wenn das nicht klappt, werde ich den Code-Behind verwenden. Wenn es mir erlaubt, Storyboard.Target und Storyboard.TargetProperty nicht zuzuweisen.

EDIT: Ich möchte einen Gradient-Stop des Pinsels animieren. Das Problem ist, dass ich es leicht animieren kann, wenn es keine Ressource ist, sondern direkt auf ein Objekt angewendet wird. Das kann ich durch Klicken in Expression Blend tun. Ich weiß einfach nicht, wie ich es animieren soll, wenn es eine Ressource ist (d. h. was anstelle von ?? im untenstehenden Code zu setzen ist (das Storyboard wurde für ein Rechteck erstellt))

code:

 ...

4voto

Andrej Punkte 951

Es funktioniert, wenn Sie die Hintergrund/Füllung Eigenschaft direkt animieren, indem Sie den Namen des Objekts (z.B. Rectangle), das Sie animieren möchten, als Storyboard.TargetName verwenden:

Bearbeiten

Von code-behind scheint es vollkommen möglich zu sein:

XAML:

C# code-behind:

        LinearGradientBrush b = grid.Resources["Outline"] as LinearGradientBrush;

        b.GradientStops[0].BeginAnimation(GradientStop.OffsetProperty, new DoubleAnimation(0, 1, new Duration(TimeSpan.FromSeconds(1))));

1voto

Sie können Eigenschaften des Typs "Brush" nicht animieren, Sie können nur Typen animieren, die eine geeignete Animationsklasse haben, wie z.B. DoubleAnimation, PointAnimation oder ColorAnimation (beachten Sie, dass der letzte Typ Eigenschaften des Typs Farbe, nicht Pinsel, animiert).

Einige Pinsel haben jedoch Abhängigkeitseigenschaften vom Typ double, die Sie animieren könnten, zum Beispiel die StartPoint- und EndPoint-Eigenschaften der LinearGradientBrush-Klasse.

Wenn Sie genauer erklären können, was die Animation genau tun soll, könnten wir vielleicht eine Lösung finden.

Bearbeiten: Um den Pinsel zu animieren, müsste er im Bereich Ihres Animations-Triggers deklariert werden, z.B. im Daten- oder ControlTemplate. Das Animieren eines Ressourcen über deren Schlüssel funktioniert nicht.

0voto

Justin Niessner Punkte 235353

Nicht sicher, was genau du versuchst innerhalb des Pinsels zu animieren, aber das Animieren von Pinselressourcen kann sehr knifflig sein. Ich habe keine Zeit, um alles auszutippen, aber hier ist ein kleines 'Tutorial' dazu, wie man damit umgeht:

Pinsel mit ObjectAnimationUsingKeyFrames animieren

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X