Ich habe eine WPF-Anwendung, und ich versuche, eine TextBox mit dem .Net v4 Visual State Manager zu stylen. Insbesondere versuche ich, die Farben von Vordergrund und Hintergrund für den MouseOver-Status festzulegen.
Was passiert, ist, dass, während der Hintergrund und die Grenze sich perfekt ändern, der Vordergrund nicht ist. Wenn die Pinsel, die ich verwende, ihre Farbe über eine StaticResource erhalten, ändert sich der Vordergrund überhaupt nicht. Wenn die Pinsel, die ich verwende, ihre Farbe über eine DynamicResource erhalten, ändert sich der Vordergrund aller TextBoxen, wenn ich mit der Maus über ein TextBox-Objekt gehe. Klar, entweder mache ich etwas falsch, oder was ich tun möchte, ist mit VSM einfach nicht möglich (was ziemlich enttäuschend wäre).
Hier sind die Ressourcen, die ich verwende:
%Vor%Es ist sehr merkwürdig für mich, dass die Background- und Boarder-Pinseln, die auf genau die gleiche Weise erstellt und animiert werden, perfekt funktionieren, egal ob ich statische oder dynamische Ressourcen verwende, aber die Vordergrundfarbe nicht.
>Wenn jemand irgendwelche Ideen hat, oder wenn es einen besseren Weg gibt, dies zu tun, würde ich es gerne hören.
David Mullin IMA-Technologien
VisualStateManager
kann keine Eigenschaften steuern, deren Werte über eine Bindung festgelegt werden. In Ihrem Beispiel sind sowohl Background
als auch BorderBrush
auf lokale Werte ( Transparent
) gesetzt und daher kann der VSM diese animieren. Auf der anderen Seite wird Foreground
mit einem TemplateBinding
festgelegt und daher kann der VSM ihn nicht animieren, wenn ein Bindungswert in Kraft ist.
Dies ist eine allgemeine Einschränkung von VisualStateManager
und Sie werden es in allen Beispielen sehen, in denen es verwendet wird. Eine typische Strategie, um das Problem zu umgehen, besteht darin, Ebenen und Deckkraft zu verwenden, um die Illusion von Farbanimation zu erzeugen, wenn wirklich ein Übergang von einem Element zu einem anderen stattfindet. Das funktioniert, weil Sie die versteckte Ebene vollständig kontrollieren können und nicht an irgendetwas binden müssen. Leider wird dies nicht für Ihre Bedürfnisse funktionieren, da das Element nicht statisch ist; Sie können nicht zwei Textfelder haben.
Der Nettoeffekt ist, dass ich glaube nicht, dass Sie sowohl die Text-Vordergrundfarbe animieren als auch die Vordergrundfarbe vom Benutzer angeben lassen können.