2 Stimmen

Silverlight: Wie man einen VisualState für ein Templated / Custom Control erstellt

Ich versuche, eine Vorlage/ein benutzerdefiniertes Steuerelement in Silverlight zu erstellen.

Die Basissteuerung kann ein System.Windows.Controls.Button . Die Schaltfläche hat die folgenden visuellen Zustände:

<vsm:VisualStateManager.VisualStateGroups>
    <!--Define the states for the common states. The states in a 
                            VisualStateGroup are mutually exclusive to each other.-->
    <vsm:VisualStateGroup x:Name="CommonStates">
        <!--Define the VisualStates in this VistualStateGroup.-->
        <vsm:VisualState x:Name="Normal"/>
        <vsm:VisualState x:Name="MouseOver" />
        <vsm:VisualState x:Name="Pressed" />
        <vsm:VisualState x:Name="Disabled" />
    </vsm:VisualStateGroup>
    <!--Define the states for the focus states. The states in a 
                            VisualStateGroup are mutually exclusive to each other.-->
    <vsm:VisualStateGroup x:Name="FocusStates">
        <!--Define the VisualStates in this VistualStateGroup.-->
        <vsm:VisualState x:Name="Focused" />
        <vsm:VisualState x:Name="Unfocused" />
    </vsm:VisualStateGroup>
</vsm:VisualStateManager.VisualStateGroups>

Mein benutzerdefiniertes Steuerelement erfordert einen anderen Status, MouseButtonUp ( MouseButtonDown kann durch die vordefinierte Pressed Zustand). Hier ist die MouseButtonUp Zustand wird als eine MouseOver Status standardmäßig, aber ich möchte, dass die MouseButtonUp Staat verhält sich anders als ein MouseOver Zustand.

Wie kann ich dies hinzufügen? MouseButtonUp visuellen Zustand? ( MouseButtonUp gibt es erst, nachdem der Benutzer die Maus losgelassen hat und bevor er sich bewegt.

BTW: Sollte ich Custom Control oder User Control verwenden? Ich bin sehr verwirrt über diese beiden. Es scheint, dass beide in vielen Fällen funktionieren würden.

Herzlichen Dank.

UPDATE: Nachdem wir dies hinzugefügt haben MouseButtonUp Zustand, könnte ich die visuellen Übergänge wie:

<vsm:VisualTransition From="Pressed" To="MouseButtonUp" GeneratedDuration="0:0:5" />

Oder:

<vsm:VisualTransition From="MouseButtonUp" To="MouseOver" GeneratedDuration="0:0:5" />

2voto

Jinxdoors Punkte 21

Die folgende Zeile erstellt einen Visual-State für Sie in Ihrem Xaml.

    <vsm:VisualState x:Name="MouseButtonUp">
        ...Your code for animation
    </vsm:VisualState>

Das ist noch nicht alles. Es ist nutzlos, es sei denn, Sie zwingen Ihre Ausführungskontrolle, zu diesem Visual-State zu gehen. Nun, wie macht man das? So geht's.

    VisualStateManager.GoToState(this, "MouseButtonUp", true);

Der obige Code führt jede Animation aus, die Sie in Ihrer 'MouseButtonUp' VisualState-Definition in Ihrer xaml definiert haben könnten. Rufen Sie die obige Codeanweisung überall dort auf, wo Sie das Gefühl haben, dass Ihre Maus einen MousebuttonUp-Status hatte.

0 Stimmen

Ich habe Ihre Anweisungen befolgt. Es scheint, dass das System den neuen Zustand "MouseButtonUp" erkannt hat, aber ich kann diesen Zustand nicht animieren, zum Beispiel, <vsm:VisualTransition From="Pressed" To="MouseButtonUp" GeneratedDuration="0:0:5" /> ist, wird dieser Übergang ignoriert. Bitte um Rat.

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