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 という名前の VisualStateGroupVisualStateManager.VisualStatesGroups 添付プロパティに追加します。The following example creates a Rectangle and adds a VisualStateGroup named CommonStates to the VisualStateManager.VisualStatesGroups attached property. この例では、CommonStatesVisualStateGroup内の MouseOverNormalVisualState オブジェクトを定義します。The 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. Storyboard は必要ありません。 RectangleMouseOver 状態から Normal 状態に遷移すると、StoryboardMouseOver が停止し、ColorSolidColorBrush プロパティが赤に戻るためです。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 が押されたときにに対応する2つの状態 ("Pressed") と、("Normal")。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. ControlTemplate内の VisualStateManager を使用するコントロールを作成する場合は、GoToState メソッドを呼び出します。If 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. VisualStateManagerControlTemplate の外部で使用する場合 (たとえば、UserControl または1つの要素で VisualStateManager を使用する場合) は、GoToElementState メソッドを呼び出します。If 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. たとえば、コントロールが、それぞれにストーリーボードが関連付けられている状態、State1State2を定義しているとします。For example, suppose that a control defines the states, State1 and State2, each of which has a storyboard associated with it. コントロールが State1 にあり、State2GoToState または GoToElementStateに渡すと、VisualStateManager によってストーリーボードが開始され State2 でストーリーボードが停止されます。State1If 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. WPFWPFに含まれるコントロールの ControlTemplate を作成する場合は、コントロールの ControlTemplateVisualState オブジェクトを追加して、コントロールの外観を特定の状態で指定できます。When 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. コントロールのロジックは状態間の遷移を処理するので、新しい ControlTemplateVisualState オブジェクトを定義する以外に、何もする必要はありません。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.



このインスタンスの CLRCLR 型をラップする DependencyObjectType を取得します。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. これは、呼び出し元の DependencyObject の依存関係プロパティのプロパティ メタデータで指定されている CoerceValueCallback 関数を呼び出すことによって実現されます。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)

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

(継承元 Object)

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

(継承元 DispatcherObject)