VisualStateGroup クラス
定義
重要
一部の情報は、リリース前に大きく変更される可能性があるプレリリースされた製品に関するものです。 Microsoft は、ここに記載されている情報について、明示または黙示を問わず、一切保証しません。
相互に排他的な 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>
- 継承
- 属性
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 に使用される VisualState の x:Name 属性です。 VisualStateManager.GoToState を使用するすべてのユーザーは、使用可能なすべてのグループと状態を認識し、各呼び出しが古い状態からグループ内の新しい状態に正しく遷移するようにする必要があります。
VisualState 要素のセットに加えて、VisualStateGroup は一連の VisualTransition 要素を定義することもできます。各 VisualTransition は、グループで定義されている名前付き VisualState 要素の少なくとも 1 つに関連します。 XAML では、VisualState 要素のセットを VisualStateGroup のイミディエイト オブジェクト要素の子要素として宣言できます。 これは、ビジュアル状態のコレクションである States プロパティが VisualStateGroup の XAML コンテンツ プロパティであるために可能です。 これに対し、ビジュアル遷移のコレクションを設定するには、XAML の VisualStateGroup.Transitions プロパティ要素内でそのコレクションを宣言する必要があります。 XAML コンテンツ プロパティの詳細については、「 XAML 構文ガイド」を参照してください。
StateTriggers を使用して視覚的な状態を制御する場合、トリガー エンジンは次の優先順位規則を使用してトリガーをスコア付けし、アクティブになるトリガーと、対応する VisualState を決定します。
- StateTriggerBase から派生するカスタム トリガー
- MinWindowWidth が原因でアクティブ化された AdaptiveTrigger
- MinWindowHeight が原因でアクティブ化された AdaptiveTrigger
スコアリングで競合するアクティブなトリガーが一度に複数ある場合 (つまり、2 つのアクティブなカスタム トリガー)、マークアップ ファイルで宣言された最初のトリガーが優先されます。
注: AdaptiveTrigger は StateTriggerBase から派生しますが、アクティブ化できるのは MinWindowWidth または MinWindowHeight の設定のみです。
VisualStateGroup カスタム VisualStateManager 実装をサポートする API
VisualStateGroup の API の多くは、カスタム VisualStateManager 実装をサポートするためにのみ存在します。 Name、CurrentState、CurrentStateChanging、CurrentStateChanged などがあります。 コントロール テンプレートのビジュアル状態の最も一般的な使用法では、これらの 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 |
コントロールが別の状態に変化し始めると発生します。 |