Mit Interaktion.Auslöser in WPF
Habe ich versucht mit System.Windows.Die Interaktivität.Interaktion mit WPF von MS Expression Blend SDK for .NET 4. Das problem ist, dass ich nicht finden können, die Interaktion.Trigger angefügte Eigenschaft gibt. Die Interaktion der Klasse vorhanden ist, aber ich sehe nur 4 Mitglieder, in: Gleich, GetBehaviors, GetTriggers, ReferenceEquals.
Ich schaute auf die Eigenschaften der Referenz System.Windows.Interactivity.dll in meinem Projekt und fand, dass der Pfad
"C:\Program Files (x86)\Microsoft
SDKs\Expression\Blend.NETFramework\v4.0\Libraries\System.Windows.Interactivity.dll"
So, ich öffnete die Datei auf diesem Weg mit IL-Disassembler und festgestellt, dass die Interaktion der Klasse hat eigentlich die Auslöser angefügte Eigenschaft, aber die Eigenschaft ist als private deklariert! Dann öffnete ich die gleiche dll in \Lib\Desktop-Verzeichnis des Prism-SDK und fand die gleiche situation. Die Versionen dieser dlls sind 2.0.20525.0. Es gibt auch eine System.Windows.Interactivity.xml Datei mit dem System.Windows.Interaktivität dlls. In ihm fand ich Folgendes über TriggersProperty:
Diese Eigenschaft ist nicht öffentlich verfügbar gemacht wird. Dies zwingt die Kunden zur Nutzung der GetTriggers und SetTriggers Methoden zum Zugriff auf die
Sammlung, die Gewährleistung der Sammlung vorhanden ist und festgelegt wird, bevor es verwendet wird.
Aber ich habe nicht gefunden SetTriggers Methoden gibt. BTW, der Silverlight-Interaktion hat TriggersProperty als öffentliche member.
Ich habe gesehen, viele Beispiele mit Interaktion.Trigger mit WPF und ich nehme an, es sollte keine Probleme. Was mache ich falsch?
InformationsquelleAutor XanderMK | 2012-05-01
Du musst angemeldet sein, um einen Kommentar abzugeben.
Gut, es ist definitiv etwas seltsames vor sich ging. Hier ist was ich gefunden habe:
Habe ich nicht eine Erklärung. Jedoch kann ich sagen, dass, wenn Sie einfach schreiben
<i:Interaction.Triggers>
in Ihre WPF-XAML und Referenz System.Windows.Interactivity.dll von Prism 4.1, es funktioniert einfach wie erwartet.Ich habe versucht, die überprüfung einige andere framework-Klassen, um zu sehen, ob es ein bug in ILDASM, aber diese alle dargestellt mit dem richtigen access-modifier. Also ich weiß nicht, warum das Prism version arbeiten, aber es scheint genau das zu tun. Ich habe nicht versucht, das gerade Blend SDK-version, da ich noch keine hatte, er braucht es.
edit: Ein wenig mehr info: Graben, um mit Resharper, fand ich, dass die Interaktion.TriggersProperty ist nicht überall eingesetzt. Allerdings Ist Die Interaktion.GetTriggers verwendet, die alle über mein WPF-code. So bin ich Wetten, dass es einige XAML-binding Reflexion Magie, die macht das ganze funktioniert. Ich sage "magic", weil ich es nicht verstehen. Anscheinend ist der Blend SDK die Leute denken, Sie sollten Sie nur verwenden, die das Verhalten und Löst angefügte Eigenschaft in XAML, aber der Prism-Leute denken, Sie sollten in der Lage sein, es zu benutzen von code.
Es ist kein Tippfehler. Es zeigt sich unterschiedlich in den Objekt-browser und ILDASM. Sie sind definitiv die gleichen Dateien geladen werden, in den beiden Werkzeugen. Probieren Sie es selbst wenn Sie mir nicht glauben.
Ja, das funktioniert. Ich muss mich wohl vertippt haben etwas das erste mal. Sieht aus wie die Interaktion.GetTriggers wird zunächst geprüft, ob die Interaktion.Trigger-Eigenschaft festgelegt wurde, und setzt es anders. Und die Interaktion.GetTriggers ist der einzige Legale Weg in WPF zu erhalten-Interaktion.Triggern. BTW, für einige Grund, den Namen der Interaktion.Trigger-Eigenschaft ist "ShadowTriggers". Es ist wahr, in WPF, nicht sicher über Silverlight.
InformationsquelleAutor Mike Post