VisualStateGroup クラス
定義
重要
一部の情報は、リリース前に大きく変更される可能性があるプレリリースされた製品に関するものです。 Microsoft は、ここに記載されている情報について、明示または黙示を問わず、一切保証しません。
相互に排他的な 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>
- 継承
- 属性
例
次の使用例は、1 つの Grid を含む Button の単純な ControlTemplate を作成します。 また、"PointerOver" 状態と "Normal" 状態を定義する "CommonStates" と呼ばれる も含まれています VisualStateGroup
。
VisualStateGroup
には、ユーザーが ポインターを の上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 を決定します。
- StateTriggerBase から派生するカスタム トリガー
- MinWindowWidth が原因でアクティブ化された AdaptiveTrigger
- MinWindowHeight が原因でアクティブ化された AdaptiveTrigger
スコアリングで競合するアクティブなトリガーが一度に複数ある場合 (つまり、2 つのアクティブなカスタム トリガー)、マークアップ ファイルで宣言された最初のトリガーが優先されます。
注: AdaptiveTrigger は StateTriggerBase から派生しますが、アクティブ化できるのは MinWindowWidth または MinWindowHeight の設定のみです。
VisualStateGroup カスタム VisualStateManager 実装をサポートする API
の API VisualStateGroup
の多くは、カスタム VisualStateManager 実装をサポートするためにのみ存在します。 Name、CurrentState、CurrentStateChanging、CurrentStateChanged などがあります。 コントロール テンプレートのビジュアル状態の最も一般的な使用法では、これらの API は必要ありません。 特に、イベントを処理するのは一般的ではありません。 コントロールのほとんどのロジック操作には、独自のプロパティとイベントが含まれている必要があります。 ほとんどのアプリおよびコントロール定義のシナリオでは、コントロールに発生する視覚的な状態の変更は、コントロールがそのテンプレートに適用されるロジックの最終的な結果であり、他のロジックのトリガーではありません。
コンストラクター
VisualStateGroup() |
VisualStateGroup クラスの新しいインスタンスを初期化します。 |
プロパティ
CurrentState |
GoToState メソッドの正常な呼び出しから、最後に設定された VisualState を取得します。 |
Dispatcher |
常に Windows アプリ SDK アプリで を返します |
DispatcherQueue |
このオブジェクトが |
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 |
コントロールが別の状態に変化し始めると発生します。 |