VisualStateManager クラス


コントロールの状態を遷移するための状態とロジックを管理します。Manages states and the logic for transitioning between states for controls.

public ref class VisualStateManager : System::Windows::DependencyObject
public class VisualStateManager : System.Windows.DependencyObject
type VisualStateManager = class
    inherit DependencyObject
Public Class VisualStateManager
Inherits DependencyObject

次の例ではRectangle 、を作成しCommonStates 、とVisualStateManager.VisualStatesGroupsいう名前のをVisualStateGroup添付プロパティに追加します。The following example creates a Rectangle and adds a VisualStateGroup named CommonStates to the VisualStateManager.VisualStatesGroups attached property. この例ではMouseOverNormal VisualState 内のオブジェクトVisualStateGroupおよびオブジェクトを定義します。 CommonStatesThe example defines the MouseOver and NormalVisualState objects in the CommonStatesVisualStateGroup. ユーザーがマウスポインターをのRectangle上に移動すると、1秒間に赤から緑に変わります。When the user moves the mouse pointer over the Rectangle, it changes from red to green over one half second. ユーザーがマウスを四角形の外に移動すると、 Gridは直ちに赤に戻ります。When the user moves the mouse away from the rectangle, the Grid immediately changes back to red. Normal状態では、 Storyboardが定義されていないことに注意してください。Note that the Normal state does not define a Storyboard. Rectangle が状態NormalからColor状態に遷移するMouseOverと、のが停止し、のプロパティによってが返されるため、は必要SolidColorBrushありません。 Storyboard MouseOver Storyboard赤にします。A Storyboard is not required because when the Rectangle transitions from the MouseOver state to the Normal state, the Storyboard for MouseOver is stopped and the Color property for the SolidColorBrush returns to red.

<Rectangle Name="rect" 
           Width="100" Height="100"
    <VisualStateGroup Name="MouseStates">
      <VisualState Name="MouseEnter">
          <ColorAnimation To="Green" 
      <VisualState Name="MouseLeave" />
        <VisualTransition To="MouseLeave" GeneratedDuration="00:00:00"/>

        <VisualTransition To="MouseEnter" GeneratedDuration="00:00:00.5">
            <ExponentialEase EasingMode="EaseOut" Exponent="10"/>


    <SolidColorBrush x:Name="rectBrush" Color="Red"/>

次の例では、前の例で定義されているイベントハンドラー GoToElementStateを示しています。メソッドを呼び出して、状態を遷移させることができます。The following example shows the event handler that is defined in the previous example and calls the GoToElementState method to transition between states. 前の例の四角形がのControlTemplate一部であった場合、この例ではGoToStateメソッドを呼び出す必要があります。If the rectangle in the previous example was part of a ControlTemplate, the example would have to call the GoToState method.

private void rect_MouseEvent(object sender, MouseEventArgs e)
    if (rect.IsMouseOver)
        VisualStateManager.GoToElementState(rect, "MouseEnter", true);
        VisualStateManager.GoToElementState(rect, "MouseLeave", true);
Private Sub rect_MouseEvent(ByVal sender As Object, ByVal e As MouseEventArgs)
    If rect.IsMouseOver Then
        VisualStateManager.GoToElementState(rect, "MouseEnter", True)
        VisualStateManager.GoToElementState(rect, "MouseLeave", True)
    End If
End Sub


VisualStateManager使用すると、コントロールの状態、コントロールが特定の状態にあるときの外観、およびコントロールが状態を変更したときの状態を指定できます。The VisualStateManager enables you to specify states for a control, the appearance of a control when it is in a certain state, and when a control changes states. たとえば、が押さButtonれているときとは異なる方法で押されていると、が若干異なる場合があります。For example, a Button might have a slightly different appearance when it is pressed than when it is not pressed. が押されたButtonとき ("Pressed") と ("Normal") ではない場合に、が定義する2つの状態。Two states that the Button defines correspond to when it is pressed ("Pressed") and when it is not ("Normal"). コントロールが状態にある場合の外観は、 VisualStateによって定義されます。The appearance of a control when it is in a state is defined by a VisualState. には、コントロールがStoryboardその状態であるときにコントロールの外観がどのように変化するかを指定するオブジェクトのコレクションが含まれています。VisualStateA VisualState contains a collection of Storyboard objects that specify how the control's appearance changes when the control is in that state. コントロールのVisualStateManager.VisualStateGroups添付プロパティを設定することによって、コントロールに視覚的な状態を追加します。You add visual states to a control by setting the VisualStateManager.VisualStateGroups attached property on the control. VisualStateGroupには、相互VisualStateに排他的なオブジェクトのコレクションが含まれています。Each VisualStateGroup contains a collection of VisualState objects that are mutually exclusive. つまり、コントロールの状態VisualStateGroupは常に1つだけです。That is, the control is always in exactly one state of in each VisualStateGroup.

VisualStateManagerは、コントロールが特定の状態に入るタイミングを指定することもできます。The VisualStateManager also enables you to specify when a control enters a specific state. 状態を変更するために呼び出す必要があるメソッドは、実際のシナリオによって異なります。The method that you should call to change states depends on your scenario. VisualStateManager GoToStateでを使用するコントロールを作成する場合は、メソッドを呼び出します。ControlTemplateIf you create a control that uses the VisualStateManager in its ControlTemplate, call the GoToState method. を使用VisualStateManagerするコントロールを作成する方法の詳細については、「カスタマイズ可能な外観を持つコントロールの作成」を参照してください。For more information about how to create controls that use the VisualStateManager, see Creating a Control That Has a Customizable Appearance. VisualStateManager VisualStateManager UserControl GoToElementStateの外側でを使用する場合(たとえば、または1つの要素でを使用する場合)は、メソッドを呼び出します。ControlTemplateIf you use the VisualStateManager outside of a ControlTemplate (for example, if you use a VisualStateManager in a UserControl or in a single element), call the GoToElementState method. どちらの場合も、 VisualStateManagerは、関連する状態に関連付けられているストーリーボードを適切に開始および停止するために必要なロジックを実行します。In either case, the VisualStateManager performs the logic that is required to appropriately start and stop the storyboards that are associated with the involved state. たとえば、コントロールが状態をState1定義し、それぞれにストーリーボードが関連付けられているとState2します。For example, suppose that a control defines the states, State1 and State2, each of which has a storyboard associated with it. コントロールがState1内にあり、またはState2 GoToElementStateGoToState渡した場合VisualStateManager 、はでState2ストーリーボードを開始し、 State1でストーリーボードを停止します。If the control is in State1 and you pass State2 to GoToState or GoToElementState, the VisualStateManager starts the storyboard in State2 and stops the storyboard in State1.

Windows Presentation Foundation (WPF)Windows Presentation Foundation (WPF)含まれているコントロールはVisualStateManager 、を使用して表示状態を変更します。Controls that are included with Windows Presentation Foundation (WPF)Windows Presentation Foundation (WPF) use the VisualStateManager to change visual states. ControlTemplate VisualState ControlTemplate含まれるコントロールのを作成するときに、コントロールのにオブジェクトを追加して、コントロールの外観を特定の状態で指定することができます。 WPFWPFWhen you create a ControlTemplate for a control that is included with WPFWPF, you can add VisualState objects to the control's ControlTemplate to specify the control's appearance in a certain state. WPFWPF含まれているコントロールの表示状態の名前を確認するには、「コントロールのスタイルとテンプレート」を参照してください。To find the names of the visual states for the controls that are included with WPFWPF, see Control Styles and Templates. コントロールのロジックは、状態間の遷移を処理するので、新しいVisualState ControlTemplateでオブジェクトを定義する以外に何もする必要はありません。The control's logic handles transitioning between states, so you do not need to do anything other than define the VisualState objects in the new ControlTemplate. 既存のコントロールのコントロールテンプレートを作成する方法の詳細については、「 ControlTemplate を作成して既存のコントロールの外観をカスタマイズする」を参照してください。For more information about how to create control templates for existing controls, see Customizing the Appearance of an Existing Control by Creating a ControlTemplate.

状態間の遷移のために独自のロジックを実装する場合は、からVisualStateManager継承し、 GoToStateCore VisualStateManager.CustomVisualStateManagerメソッドをオーバーライドし、カスタムロジックを使用するコントロールの添付プロパティを設定する必要があります。If you want to implement your own logic for transitioning between states, you must inherit from VisualStateManager, override the GoToStateCore method, and set the VisualStateManager.CustomVisualStateManager attached property on the control that uses the custom logic.



VisualStateManager クラスの新しいインスタンスを初期化します。Initializes a new instance of the VisualStateManager class.



CustomVisualStateManager 依存関係プロパティを識別します。Identifies the CustomVisualStateManager dependency property.


VisualStateGroups 依存関係プロパティを識別します。Identifies the VisualStateGroups dependency property.



このインスタンスの DependencyObjectType 型をラップする CLRCLR を取得します。Gets the DependencyObjectType that wraps the CLRCLR type of this instance.

(継承元 DependencyObject)

この Dispatcher が関連付けられている DispatcherObject を取得します。Gets the Dispatcher this DispatcherObject is associated with.

(継承元 DispatcherObject)

このインスタンスが現在シールされている (読み取り専用である) かどうかを示す値を取得します。Gets a value that indicates whether this instance is currently sealed (read-only).

(継承元 DependencyObject)



コントロールの状態を遷移させる VisualStateManager オブジェクトを取得または設定します。Gets or sets the VisualStateManager object that transitions between the states of a control.


VisualStateGroup オブジェクトのコレクションを取得または設定します。Gets or sets a collection of VisualStateGroup objects.



呼び出し元のスレッドがこの DispatcherObject にアクセスできるかどうかを確認します。Determines whether the calling thread has access to this DispatcherObject.

(継承元 DispatcherObject)

プロパティのローカル値をクリアします。Clears the local value of a property. クリアするプロパティは DependencyProperty 識別子で指定されます。The property to be cleared is specified by a DependencyProperty identifier.

(継承元 DependencyObject)

読み取り専用プロパティのローカル値を消去します。Clears the local value of a read-only property. 消去するプロパティは、DependencyPropertyKey で指定します。The property to be cleared is specified by a DependencyPropertyKey.

(継承元 DependencyObject)

指定した依存関係プロパティの値を強制します。Coerces the value of the specified dependency property. これは、呼び出し元の CoerceValueCallback の依存関係プロパティのプロパティ メタデータで指定されている DependencyObject 関数を呼び出すことによって実現されます。This is accomplished by invoking any CoerceValueCallback function specified in property metadata for the dependency property as it exists on the calling DependencyObject.

(継承元 DependencyObject)

指定した DependencyObject が現在の DependencyObject と等しいかどうかを判断します。Determines whether a provided DependencyObject is equivalent to the current DependencyObject.

(継承元 DependencyObject)

CustomVisualStateManager 添付プロパティを取得します。Gets the CustomVisualStateManager attached property.


この DependencyObject のハッシュ コードを取得します。Gets a hash code for this DependencyObject.

(継承元 DependencyObject)

どの依存関係プロパティがこの DependencyObject 上にローカルに設定された値を持つかを確認するための、専用の列挙子を作成します。Creates a specialized enumerator for determining which dependency properties have locally set values on this DependencyObject.

(継承元 DependencyObject)

現在のインスタンスの Type を取得します。Gets the Type of the current instance.

(継承元 Object)

DependencyObject のこのインスタンスにある依存関係プロパティの現在の有効値を返します。Returns the current effective value of a dependency property on this instance of a DependencyObject.

(継承元 DependencyObject)

VisualStateGroups 添付プロパティを取得します。Gets the VisualStateGroups attached property.

GoToElementState(FrameworkElement, String, Boolean)

要素を 2 つの状態の間で遷移させます。Transitions the element between two states. このメソッドを使用して、コントロールによって定義された状態ではなく、アプリケーションによって定義された状態に遷移します。Use this method to transition states that are defined by an application, rather than defined by a control.

GoToState(FrameworkElement, String, Boolean)

コントロールを 2 つの状態間で切り替えます。Transitions the control between two states. ControlTemplate を持つコントロールの状態を遷移させるには、このメソッドを使用します。Use this method to transition states on control that has a ControlTemplate.

GoToStateCore(FrameworkElement, FrameworkElement, String, VisualStateGroup, VisualState, Boolean)

コントロールは 2 つの状態の間で遷移します。Transitions a control between states.


指定した依存関係プロパティの有効値を再評価します。Re-evaluates the effective value for the specified dependency property.

(継承元 DependencyObject)

現在の Object の簡易コピーを作成します。Creates a shallow copy of the current Object.

(継承元 Object)

この DependencyObject の依存関係プロパティの有効値が更新された場合に必ず呼び出されます。Invoked whenever the effective value of any dependency property on this DependencyObject has been updated. 変更された特定の依存関係プロパティは、イベント データで報告されます。The specific dependency property that changed is reported in the event data.

(継承元 DependencyObject)
RaiseCurrentStateChanged(VisualStateGroup, VisualState, VisualState, FrameworkElement, FrameworkElement)

指定された CurrentStateChanging オブジェクトで VisualStateGroup イベントを発生させます。Raises the CurrentStateChanging event on the specified VisualStateGroup object.

RaiseCurrentStateChanging(VisualStateGroup, VisualState, VisualState, FrameworkElement, FrameworkElement)

指定された CurrentStateChanging オブジェクトで VisualStateGroup イベントを発生させます。Raises the CurrentStateChanging event on the specified VisualStateGroup object.


ローカルの依存関係プロパティの値を返します (存在する場合)。Returns the local value of a dependency property, if it exists.

(継承元 DependencyObject)
SetCurrentValue(DependencyProperty, Object)

依存関係プロパティ値のソースを変更せずにその値を設定します。Sets the value of a dependency property without changing its value source.

(継承元 DependencyObject)
SetCustomVisualStateManager(FrameworkElement, VisualStateManager)

CustomVisualStateManager 添付プロパティを設定します。Sets the CustomVisualStateManager attached property.

SetValue(DependencyProperty, Object)

依存関係プロパティ識別子を指定して、該当する依存関係プロパティのローカル値を設定します。Sets the local value of a dependency property, specified by its dependency property identifier.

(継承元 DependencyObject)
SetValue(DependencyPropertyKey, Object)

依存関係プロパティの DependencyPropertyKey 識別子で指定した読み取り専用の依存関係プロパティのローカル値を設定します。Sets the local value of a read-only dependency property, specified by the DependencyPropertyKey identifier of the dependency property.

(継承元 DependencyObject)

シリアル化プロセスが、指定された依存関係プロパティの値をシリアル化する必要があるかどうかを示す値を返します。Returns a value that indicates whether serialization processes should serialize the value for the provided dependency property.

(継承元 DependencyObject)

現在のオブジェクトを表す string を返します。Returns a string that represents the current object.

(継承元 Object)

呼び出し元のスレッドがこの DispatcherObject にアクセスできるように強制します。Enforces that the calling thread has access to this DispatcherObject.

(継承元 DispatcherObject)