次の方法で共有


VisualStateGroup クラス

定義

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

public ref class VisualStateGroup sealed : DependencyObject
/// [Microsoft.UI.Xaml.Markup.ContentProperty(Name="States")]
/// [Windows.Foundation.Metadata.Activatable(65536, "Microsoft.UI.Xaml.WinUIContract")]
/// [Windows.Foundation.Metadata.ContractVersion(Microsoft.UI.Xaml.WinUIContract, 65536)]
/// [Windows.Foundation.Metadata.MarshalingBehavior(Windows.Foundation.Metadata.MarshalingType.Agile)]
/// [Windows.Foundation.Metadata.Threading(Windows.Foundation.Metadata.ThreadingModel.Both)]
class VisualStateGroup final : DependencyObject
[Microsoft.UI.Xaml.Markup.ContentProperty(Name="States")]
[Windows.Foundation.Metadata.Activatable(65536, "Microsoft.UI.Xaml.WinUIContract")]
[Windows.Foundation.Metadata.ContractVersion(typeof(Microsoft.UI.Xaml.WinUIContract), 65536)]
[Windows.Foundation.Metadata.MarshalingBehavior(Windows.Foundation.Metadata.MarshalingType.Agile)]
[Windows.Foundation.Metadata.Threading(Windows.Foundation.Metadata.ThreadingModel.Both)]
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
属性

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

<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 で使用される各名前文字列は、そのテンプレートで一意である必要があります。 ただし、異なるコントロールには同じグループ名を使用するのが一般的です。 たとえば、ほぼすべての既存のコントロール テンプレートには VisualStateGroup 、"CommonStates" の が含 x:Name attribute まれています。

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

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

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

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

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

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

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

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

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

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

コンストラクター

VisualStateGroup()

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

プロパティ

CurrentState

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

Dispatcher

常に Windows アプリ SDK アプリで を返しますnull。 代わりに DispatcherQueue を使用してください。

(継承元 DependencyObject)
DispatcherQueue

このオブジェクトが DispatcherQueue 関連付けられている を取得します。 は DispatcherQueue 、コードが 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

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

適用対象

こちらもご覧ください