VisualStateGroup クラス

定義

相互に排他的な VisualState オブジェクトと、ある状態から別の状態に移動するために使用される VisualTransition オブジェクトが含まれます。

public ref class VisualStateGroup sealed : DependencyObject
/// [Windows.Foundation.Metadata.Activatable(65536, Windows.Foundation.UniversalApiContract)]
/// [Windows.Foundation.Metadata.ContractVersion(Windows.Foundation.UniversalApiContract, 65536)]
/// [Windows.Foundation.Metadata.MarshalingBehavior(Windows.Foundation.Metadata.MarshalingType.Agile)]
/// [Windows.Foundation.Metadata.Threading(Windows.Foundation.Metadata.ThreadingModel.Both)]
/// [Windows.UI.Xaml.Markup.ContentProperty(Name="States")]
class VisualStateGroup final : DependencyObject
/// [Windows.Foundation.Metadata.ContractVersion(Windows.Foundation.UniversalApiContract, 65536)]
/// [Windows.Foundation.Metadata.MarshalingBehavior(Windows.Foundation.Metadata.MarshalingType.Agile)]
/// [Windows.Foundation.Metadata.Threading(Windows.Foundation.Metadata.ThreadingModel.Both)]
/// [Windows.UI.Xaml.Markup.ContentProperty(Name="States")]
/// [Windows.Foundation.Metadata.Activatable(65536, "Windows.Foundation.UniversalApiContract")]
class VisualStateGroup final : DependencyObject
[Windows.Foundation.Metadata.Activatable(65536, typeof(Windows.Foundation.UniversalApiContract))]
[Windows.Foundation.Metadata.ContractVersion(typeof(Windows.Foundation.UniversalApiContract), 65536)]
[Windows.Foundation.Metadata.MarshalingBehavior(Windows.Foundation.Metadata.MarshalingType.Agile)]
[Windows.Foundation.Metadata.Threading(Windows.Foundation.Metadata.ThreadingModel.Both)]
[Windows.UI.Xaml.Markup.ContentProperty(Name="States")]
public sealed class VisualStateGroup : DependencyObject
[Windows.Foundation.Metadata.ContractVersion(typeof(Windows.Foundation.UniversalApiContract), 65536)]
[Windows.Foundation.Metadata.MarshalingBehavior(Windows.Foundation.Metadata.MarshalingType.Agile)]
[Windows.Foundation.Metadata.Threading(Windows.Foundation.Metadata.ThreadingModel.Both)]
[Windows.UI.Xaml.Markup.ContentProperty(Name="States")]
[Windows.Foundation.Metadata.Activatable(65536, "Windows.Foundation.UniversalApiContract")]
public sealed class VisualStateGroup : DependencyObject
Public NotInheritable Class VisualStateGroup
Inherits DependencyObject
<VisualStateManager.VisualStateGroups>
   <VisualStateGroup x:Name="groupname" ...>
     oneOrMoreVisualStates
   </VisualStateGroup>
   <!--- other peer VisualStateGroup's here ... -->
</VisualStateManager.VisualStateGroups>
継承
Object Platform::Object IInspectable DependencyObject VisualStateGroup
属性

Windows の要件

デバイス ファミリ
Windows 10 (10.0.10240.0 で導入)
API contract
Windows.Foundation.UniversalApiContract (v1.0 で導入)

次の使用例は、1 つの Grid を含む Button の単純な ControlTemplate を作成します。 また、"PointerOver" 状態と "Normal" 状態を定義する "CommonStates" という VisualStateGroup も含まれています。 また、VisualStateGroup には VisualTransition があり、ユーザーがボタンの上にポインターを置いたときに Grid が緑から赤に変わるまで 1/5 秒かかることを指定 します

<ControlTemplate TargetType="Button">
  <Grid >
    <VisualStateManager.VisualStateGroups>
      <VisualStateGroup x:Name="CommonStates">

        <VisualStateGroup.Transitions>

          <!--Take one half second to transition to the PointerOver state.-->
          <VisualTransition To="PointerOver" 
                              GeneratedDuration="0:0:0.5"/>
        </VisualStateGroup.Transitions>
        
        <VisualState x:Name="Normal" />

        <!--Change the SolidColorBrush, ButtonBrush, to red when the
            Pointer is over the button.-->
        <VisualState x:Name="PointerOver">
          <Storyboard>
            <ColorAnimation Storyboard.TargetName="ButtonBrush" 
                            Storyboard.TargetProperty="Color" To="Red" />
          </Storyboard>
        </VisualState>
      </VisualStateGroup>
    </VisualStateManager.VisualStateGroups>
    <Grid.Background>
      <SolidColorBrush x:Name="ButtonBrush" Color="Green"/>
    </Grid.Background>
  </Grid>
</ControlTemplate>

注釈

XAML でコントロール テンプレートの一部として宣言された各 VisualStateGroup には、常に x:Name 属性 が設定されている必要があります。 コントロール テンプレートの VisualStateGroups のセットで使用される各名前文字列は、そのテンプレートで一意である必要があります。 ただし、異なるコントロールには同じグループ名を使用するのが一般的です。 たとえば、ほぼすべての既存のコントロール テンプレートには、"CommonStates" の x:Name 属性 を持つ VisualStateGroup があります。

各 VisualStateGroup 内の一連のビジュアル状態は、グループ内で相互に排他的である必要があります。 つまり、コントロールは、定義されている各 VisualStateGroup グループのビジュアル状態の 1 つを常に使用する必要があります。 コントロールが 2 つの状態で同時に行われるように意図されている場合は常に、2 つの状態が異なるグループにあることを確認します。 たとえば、ドロップダウン コントロールに同時にフォーカスを設定し、ドロップダウンを開く場合があります。 正しいビジュアル状態設計では、状態ごとに個別の VisualStateGroup が用意されているため、両方を一度にアクティブにすることができます。 このようなグループには、"FocusStates" や "DropDownStates" などの名前が付く場合があります。

VisualState 要素の 1 つで一時的なストーリーボードの動作を有効にする VisualStateGroup を定義するときは常に、前の状態を取り消すために呼び出すことができる 2 つ目の VisualState もグループに含まれていることを確認します。 これは、ストーリーボードをまったく持たない 2 つ目の VisualState を宣言するのと同じくらい簡単で、単なる x:Name 属性です。

VisualStateGroup に設定した x:Name 属性値は、VisualStateManager.GoToState の呼び出しには使用されません。代わりに、VisualStateManager.GoToState に使用される VisualStatex:Name 属性です。 VisualStateManager.GoToState を使用するすべてのユーザーは、使用可能なすべてのグループと状態を認識し、各呼び出しが古い状態からグループ内の新しい状態に正しく遷移するようにする必要があります。

VisualState 要素のセットに加えて、VisualStateGroup は一連の VisualTransition 要素を定義することもできます。各 VisualTransition は、グループで定義されている名前付き VisualState 要素の少なくとも 1 つに関連します。 XAML では、VisualState 要素のセットを VisualStateGroup のイミディエイト オブジェクト要素の子要素として宣言できます。 これは、ビジュアル状態のコレクションである States プロパティが VisualStateGroup の XAML コンテンツ プロパティであるために可能です。 これに対し、ビジュアル遷移のコレクションを設定するには、XAML の VisualStateGroup.Transitions プロパティ要素内でそのコレクションを宣言する必要があります。 XAML コンテンツ プロパティの詳細については、「 XAML 構文ガイド」を参照してください。

StateTriggers を使用して視覚的な状態を制御する場合、トリガー エンジンは次の優先順位規則を使用してトリガーをスコア付けし、アクティブになるトリガーと、対応する VisualState を決定します。

  1. StateTriggerBase から派生するカスタム トリガー
  2. MinWindowWidth が原因でアクティブ化された AdaptiveTrigger
  3. MinWindowHeight が原因でアクティブ化された AdaptiveTrigger

スコアリングで競合するアクティブなトリガーが一度に複数ある場合 (つまり、2 つのアクティブなカスタム トリガー)、マークアップ ファイルで宣言された最初のトリガーが優先されます。

注: AdaptiveTriggerStateTriggerBase から派生しますが、アクティブ化できるのは MinWindowWidth または MinWindowHeight の設定のみです。

VisualStateGroup カスタム VisualStateManager 実装をサポートする API

VisualStateGroup の API の多くは、カスタム VisualStateManager 実装をサポートするためにのみ存在します。 NameCurrentState、CurrentStateChangingCurrentStateChanged などがあります。 コントロール テンプレートのビジュアル状態の最も一般的な使用法では、これらの API は必要ありません。 特に、イベントを処理するのは一般的ではありません。 コントロールのほとんどのロジック操作には、独自のプロパティとイベントが含まれている必要があります。 ほとんどのアプリおよびコントロール定義のシナリオでは、コントロールに発生する視覚的な状態の変更は、コントロールがそのテンプレートに適用されるロジックの最終的な結果であり、他のロジックのトリガーではありません。

コンストラクター

VisualStateGroup()

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

プロパティ

CurrentState

GoToState メソッドの正常な呼び出しから、最後に設定された VisualState を取得します。

Dispatcher

このオブジェクトが関連付けられている CoreDispatcher を取得します。 CoreDispatcher は、コードが UI 以外のスレッドによって開始された場合でも、UI スレッド上の DependencyObject にアクセスできる機能を表します。

(継承元 DependencyObject)
Name

VisualStateGroup の名前を取得します。

States

相互に排他的な VisualState オブジェクトのコレクションを取得します。

Transitions

VisualTransition オブジェクトのコレクションを取得します。

メソッド

ClearValue(DependencyProperty)

依存関係プロパティのローカル値をクリアします。

(継承元 DependencyObject)
GetAnimationBaseValue(DependencyProperty)

依存関係プロパティに対して確立された基本値を返します。これは、アニメーションがアクティブでない場合に適用されます。

(継承元 DependencyObject)
GetValue(DependencyProperty)

DependencyObject から依存関係プロパティの現在の有効な値を返します。

(継承元 DependencyObject)
ReadLocalValue(DependencyProperty)

ローカル値が設定されている場合は、依存関係プロパティのローカル値を返します。

(継承元 DependencyObject)
RegisterPropertyChangedCallback(DependencyProperty, DependencyPropertyChangedCallback)

この DependencyObject インスタンスの特定の DependencyProperty に対する変更をリッスンするための通知関数を登録します。

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

DependencyObject の依存関係プロパティのローカル値を設定します。

(継承元 DependencyObject)
UnregisterPropertyChangedCallback(DependencyProperty, Int64)

RegisterPropertyChangedCallback を呼び出して以前に登録した変更通知を取り消します。

(継承元 DependencyObject)

イベント

CurrentStateChanged

コントロールが別の状態に変わると発生します。

CurrentStateChanging

コントロールが別の状態に変化し始めると発生します。

適用対象

こちらもご覧ください