WPF-Daten-Trigger und Story-Boards
Ich versuche, die trigger eine Fortschritt-animation, wenn Sie jemals das ViewModel/Presentation Model Beschäftigt ist. Ich habe ein IsBusy-Eigenschaft, und das ViewModel als DataContext des UserControl. Was ist der beste Weg, um die trigger eine "progressAnimation" story-board, wenn die IsBusy-Eigenschaft true ist? Mischung nur lasst med hinzufügen von Ereignis-Triggern auf einem UserControl Ebene, und ich kann nur das erstellen von property-Trigger in meine Daten Vorlagen.
"ProgressAnimation" ist definiert als eine Ressource, die in der Benutzer-Steuerelement.
Habe ich versucht, indem die DataTriggers als ein Stil für das Benutzersteuerelement, aber wenn ich versuche zu starten, das StoryBoard, bekomme ich die folgende Fehlermeldung:
'System.Windows.Style' value cannot be assigned to property 'Style'
of object'Colorful.Control.SearchPanel'. A Storyboard tree in a Style
cannot specify a TargetName. Remove TargetName 'progressWheel'.
ProgressWheel ist der name des Objekts, bin ich versucht zu animieren, so entfernen target name ist obvisouly NICHT, was ich will.
Ich hatte gehofft, dieses Problem zu lösen in XAML mithilfe von data binding-Techniken, in-Stelle von dass zu setzen Ereignisse und starten/stoppen Sie die animation durch den code.
InformationsquelleAutor der Frage Jonas Follesø | 2008-09-17
Du musst angemeldet sein, um einen Kommentar abzugeben.
Was Sie wollen, ist möglich durch das erklären der animation auf der progressWheel selbst:
Die XAML:
Code hinter:
Viewmodel:
Hoffe, das hilft!
InformationsquelleAutor der Antwort Dabblernl
Obwohl die Antwort, vor dem anbringen der animation direkt auf das element animiert werden soll, löst dieses problem in einfachen Fällen ist dies nicht wirklich praktikabel, wenn Sie eine komplexe animation, die Bedürfnisse der Zielgruppe mehrere Elemente. (Sie können das anfügen einer animation für jedes element, natürlich, aber es wird ziemlich schrecklich zu verwalten.)
So, gibt es eine alternative Möglichkeit, dies zu lösen, mit dem Sie einen
DataTrigger
ausführen einer animation, die Ziele benannte Elemente.Gibt es drei Orte, die Sie anfügen können Auslöser in WPF: Elemente, Stile und Vorlagen. Aber die ersten beiden Möglichkeiten nicht funktionieren hier. Die erste ist ausgeschlossen, weil WPF unterstützt nicht die Verwendung eines
DataTrigger
direkt auf ein element. (Es gibt keinen besonders guten Grund dafür, soweit ich weiß. Soweit ich mich erinnere, wenn ich die Leute gebeten, auf das WPF-team über so viele Jahre her, Sie sagten, Sie würden gern zu haben, es unterstützt aber nicht die Zeit haben, damit es funktioniert.) Und styles sind out, weil, wie die Fehlermeldung, die Sie gemeldet haben, sagt, Sie kann nicht als Ziel benannte Elemente in einer animation mit einem Format verknüpft.So, dass die Blätter Vorlagen. Und Sie können entweder die Steuerung oder Daten, die Vorlagen für diese.
Durch diese Konstruktion WPF ist glücklich, lassen Sie die animation beziehen sich auf benannte Elemente in der Vorlage. (Ich habe die animation und das template content-leer - offenbar, Sie würde füllen Sie es mit Ihrem eigentlichen animation nd Inhalt.)
Den Grund, warum das funktioniert im template aber nicht auf einen Stil ist, dass wenn Sie eine Vorlage, die benannten Elemente definiert er wird immer präsent sein, und so ist es sicher für Animationen definiert, die Vorlage der Anwendungsbereich auf diese zu verweisen Elemente. Dies ist nicht generell der Fall mit Stil, denn die Stile, die angewendet werden können, um verschiedene Elemente, von denen jeder kann, die haben ganz andere visual Bäume. (Es ist ein wenig frustrierend, dass es Sie daran hindert, dies zu tun, auch in Szenarien, in denen Sie sicher sein können, dass die erforderlichen Elemente wird da sein, aber vielleicht gibt es etwas, das macht es sehr schwierig für die animation gebunden werden die benannten Elemente an der richtigen Zeit. Ich weiß, es gibt eine ganze Reihe von Optimierungen in den WPF zu aktivieren Sie Elemente von einem Stil, die wiederverwendet werden effizient, so dass vielleicht einer von denen ist, was macht es schwierig, zu unterstützen.)
InformationsquelleAutor der Antwort Ian Griffiths
Ich würde empfehlen, RoutedEvent statt Ihre IsBusy-Eigenschaft. Nur die Feuerwehr OnBusyStarted und OnBusyStopped Veranstaltung und die Verwendung Ereignis auslösen, auf die entsprechenden Elemente.
InformationsquelleAutor der Antwort Jobi Joy
Abonniert werden kann, um das PropertyChanged-Ereignis der DataObject-Klasse und machen einen RoutedEvent Feuer vom Usercontrol-Ebene.
Für RoutedEvent zu arbeiten, müssen wir die Klasse, die von DependancyObject
InformationsquelleAutor der Antwort Jobi Joy
Können Sie Auslösen.EnterAction um eine animation zu starten, wenn eine Eigenschaft geändert wird.
InformationsquelleAutor der Antwort ligaz