VisualStateManager クラス

定義

状態と、コントロールの状態間を遷移するためのロジックを管理します。

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

次の例では、Rectangle を作成し、VisualStateManager.VisualStatesGroups 添付プロパティに CommonStates という名前の VisualStateGroup を追加します。 この例では、CommonStatesVisualStateGroup内の MouseOver オブジェクトと NormalVisualState オブジェクトを定義します。 ユーザーがマウス ポインターを Rectangleの上に移動すると、1/2 秒で赤から緑に変わります。 ユーザーが四角形からマウスを離すと、Grid はすぐに赤に戻ります。 Normal 状態では、Storyboardが定義されていないことに注意してください。 RectangleMouseOver 状態から Normal 状態に遷移すると、MouseOverStoryboard が停止し、SolidColorBrushColor プロパティが赤色に戻るため、Storyboard は必要ありません。

<Rectangle Name="rect" 
           Width="100" Height="100"
           MouseEnter="rect_MouseEvent" 
           MouseLeave="rect_MouseEvent">
  <VisualStateManager.VisualStateGroups>
    <VisualStateGroup Name="MouseStates">
      <VisualState Name="MouseEnter">
        <Storyboard>
          <ColorAnimation To="Green" 
                          Storyboard.TargetName="rectBrush" 
                          Storyboard.TargetProperty="Color"/>
        </Storyboard>
      </VisualState>
      <VisualState Name="MouseLeave" />
      <VisualStateGroup.Transitions>
        <VisualTransition To="MouseLeave" GeneratedDuration="00:00:00"/>

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

      </VisualStateGroup.Transitions>
    </VisualStateGroup>
  </VisualStateManager.VisualStateGroups>

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

次の例は、前の例で定義したイベント ハンドラーを示し、GoToElementState メソッドを呼び出して状態間を遷移します。 前の例の四角形が ControlTemplateの一部であった場合は、GoToState メソッドを呼び出す必要があります。

private void rect_MouseEvent(object sender, MouseEventArgs e)
{
    if (rect.IsMouseOver)
    {
        VisualStateManager.GoToElementState(rect, "MouseEnter", true);
    }
    else
    {
        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)
    Else
        VisualStateManager.GoToElementState(rect, "MouseLeave", True)
    End If
End Sub

注釈

VisualStateManager を使用すると、コントロールの状態、コントロールが特定の状態にある場合、およびコントロールの状態が変更されたときの外観を指定できます。 たとえば、Button が押された場合と押されていない場合の外観が若干異なる場合があります。 Button が定義する 2 つの状態は、押されたとき ("Pressed") とそうでない場合 ("Normal") に対応します。 状態にある場合のコントロールの外観は、VisualStateによって定義されます。 VisualState には、コントロールがその状態のときにコントロールの外観がどのように変化するかを指定する Storyboard オブジェクトのコレクションが含まれています。 コントロールに表示状態を追加するには、コントロールの添付プロパティ VisualStateManager.VisualStateGroups 設定します。 各 VisualStateGroup には、相互に排他的な VisualState オブジェクトのコレクションが含まれています。 つまり、コントロールは常に各 VisualStateGroupの 1 つの状態になります。

VisualStateManager では、コントロールが特定の状態に入るタイミングを指定することもできます。 状態を変更するために呼び出すメソッドは、シナリオによって異なります。 ControlTemplateVisualStateManager を使用するコントロールを作成する場合は、GoToState メソッドを呼び出します。 VisualStateManagerを使用するコントロールを作成する方法の詳細については、「カスタマイズ可能な外観を持つコントロールの作成を参照してください。 ControlTemplate の外部で VisualStateManager を使用する場合 (たとえば、UserControl または単一の要素で VisualStateManager を使用する場合)、GoToElementState メソッドを呼び出します。 どちらの場合も、VisualStateManager は、関連する状態に関連付けられているストーリーボードを適切に開始および停止するために必要なロジックを実行します。 たとえば、コントロールが状態 (State1State2) を定義し、それぞれにストーリーボードが関連付けられているとします。 コントロールが State1 にあり、GoToState または GoToElementStateState2 を渡すと、VisualStateManager はストーリーボードを State2 で開始し、State1でストーリーボードを停止します。

Windows Presentation Foundation (WPF) に含まれるコントロールは、VisualStateManager を使用して表示状態を変更します。 WPF に含まれるコントロールの ControlTemplate を作成するときに、コントロールの ControlTemplateVisualState オブジェクトを追加して、コントロールの外観を特定の状態で指定できます。 WPF に含まれているコントロールの表示状態の名前については、「コントロールのスタイルとテンプレートのを参照してください。 コントロールのロジックは状態間の遷移を処理するため、新しい ControlTemplateVisualState オブジェクトを定義する以外の操作を行う必要はありません。 既存のコントロールのコントロール テンプレートを作成する方法の詳細については、「ControlTemplateを作成して既存のコントロールの外観をカスタマイズする」を参照してください。

状態間を遷移するための独自のロジックを実装する場合は、VisualStateManagerから継承し、GoToStateCore メソッドをオーバーライドし、カスタム ロジックを使用するコントロールに VisualStateManager.CustomVisualStateManager 添付プロパティを設定する必要があります。

コンストラクター

VisualStateManager()

VisualStateManager クラスの新しいインスタンスを初期化します。

フィールド

CustomVisualStateManagerProperty

CustomVisualStateManager 依存関係プロパティを識別します。

VisualStateGroupsProperty

VisualStateGroups 依存関係プロパティを識別します。

プロパティ

DependencyObjectType

このインスタンスの CLR 型をラップする DependencyObjectType を取得します。

(継承元 DependencyObject)
Dispatcher

この DispatcherObject が関連付けられている Dispatcher を取得します。

(継承元 DispatcherObject)
IsSealed

このインスタンスが現在シールされているかどうかを示す値を取得します (読み取り専用)。

(継承元 DependencyObject)

添付プロパティ

CustomVisualStateManager

コントロールの状態間を遷移する VisualStateManager オブジェクトを取得または設定します。

VisualStateGroups

VisualStateGroup オブジェクトのコレクションを取得または設定します。

メソッド

CheckAccess()

呼び出し元のスレッドがこの DispatcherObjectにアクセスできるかどうかを判断します。

(継承元 DispatcherObject)
ClearValue(DependencyProperty)

プロパティのローカル値をクリアします。 クリアするプロパティは、DependencyProperty 識別子によって指定されます。

(継承元 DependencyObject)
ClearValue(DependencyPropertyKey)

読み取り専用プロパティのローカル値をクリアします。 クリアするプロパティは、DependencyPropertyKeyで指定します。

(継承元 DependencyObject)
CoerceValue(DependencyProperty)

指定した依存関係プロパティの値を強制します。 これは、呼び出し元の DependencyObjectに存在する依存関係プロパティのプロパティ メタデータで指定された CoerceValueCallback 関数を呼び出すことによって実現されます。

(継承元 DependencyObject)
Equals(Object)

指定された DependencyObject が現在の DependencyObjectと等しいかどうかを判断します。

(継承元 DependencyObject)
GetCustomVisualStateManager(FrameworkElement)

CustomVisualStateManager 添付プロパティを取得します。

GetHashCode()

この DependencyObjectのハッシュ コードを取得します。

(継承元 DependencyObject)
GetLocalValueEnumerator()

この DependencyObjectでローカルに値が設定されている依存関係プロパティを決定するための特殊な列挙子を作成します。

(継承元 DependencyObject)
GetType()

現在のインスタンスの Type を取得します。

(継承元 Object)
GetValue(DependencyProperty)

DependencyObjectのこのインスタンスの依存関係プロパティの現在の有効な値を返します。

(継承元 DependencyObject)
GetVisualStateGroups(FrameworkElement)

VisualStateGroups 添付プロパティを取得します。

GoToElementState(FrameworkElement, String, Boolean)

要素を 2 つの状態間で遷移します。 コントロールによって定義されるのではなく、アプリケーションによって定義されている状態を遷移するには、このメソッドを使用します。

GoToState(FrameworkElement, String, Boolean)

コントロールを 2 つの状態間で遷移します。 ControlTemplateを持つコントロールの状態を遷移するには、このメソッドを使用します。

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

状態間のコントロールを遷移します。

InvalidateProperty(DependencyProperty)

指定した依存関係プロパティの有効な値を再評価します。

(継承元 DependencyObject)
MemberwiseClone()

現在の Objectの簡易コピーを作成します。

(継承元 Object)
OnPropertyChanged(DependencyPropertyChangedEventArgs)

この DependencyObject の依存関係プロパティの有効な値が更新されるたびに呼び出されます。 変更された特定の依存関係プロパティは、イベント データで報告されます。

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

指定した VisualStateGroup オブジェクトに対して CurrentStateChanging イベントを発生させます。

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

指定した VisualStateGroup オブジェクトに対して CurrentStateChanging イベントを発生させます。

ReadLocalValue(DependencyProperty)

依存関係プロパティが存在する場合は、そのローカル値を返します。

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

値ソースを変更せずに依存関係プロパティの値を設定します。

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

CustomVisualStateManager 添付プロパティを設定します。

SetValue(DependencyProperty, Object)

依存関係プロパティ識別子で指定された依存関係プロパティのローカル値を設定します。

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

依存関係プロパティの DependencyPropertyKey 識別子で指定された、読み取り専用の依存関係プロパティのローカル値を設定します。

(継承元 DependencyObject)
ShouldSerializeProperty(DependencyProperty)

シリアル化プロセスが指定された依存関係プロパティの値をシリアル化する必要があるかどうかを示す値を返します。

(継承元 DependencyObject)
ToString()

現在のオブジェクトを表す文字列を返します。

(継承元 Object)
VerifyAccess()

呼び出し元のスレッドがこの DispatcherObjectにアクセスすることを強制します。

(継承元 DispatcherObject)

適用対象