VisualStateManager クラス
定義
重要
一部の情報は、リリース前に大きく変更される可能性があるプレリリースされた製品に関するものです。 Microsoft は、ここに記載されている情報について、明示または黙示を問わず、一切保証しません。
コントロールの状態を遷移するための状態とロジックを管理します。
public ref class VisualStateManager : System::Windows::DependencyObject
public class VisualStateManager : System.Windows.DependencyObject
type VisualStateManager = class
inherit DependencyObject
Public Class VisualStateManager
Inherits DependencyObject
- 継承
例
次の例では、 を Rectangle 作成し、 VisualStateGroup 添付プロパティに 名前付き CommonStates
を VisualStateManager.VisualStatesGroups
追加します。 この例では、 MouseOver
で オブジェクトと Normal
VisualState オブジェクトを定義します CommonStates
VisualStateGroup。 ユーザーが の上にマウス ポインターを Rectangle移動すると、1/5 秒で赤から緑に変わります。 ユーザーが四角形からマウスを離すと、 Grid すぐに赤に戻ります。 状態では が Normal
定義されていないことに Storyboard注意してください。 がStoryboard状態からMouseOver
状態にNormal
遷移するとRectangle、 の が停止しColor、 StoryboardMouseOver
の プロパティSolidColorBrushが赤色に戻るため、 は必須ではありません。
<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では、コントロールが特定の状態になるタイミングを指定することもできます。 状態を変更するために呼び出すメソッドは、シナリオによって異なります。 で を使用VisualStateManagerするコントロールを作成する場合は、 メソッドをGoToState呼び出ControlTemplateします。 を使用 VisualStateManagerするコントロールを作成する方法の詳細については、「 カスタマイズ可能な外観のコントロールを作成する」を参照してください。 のControlTemplate外側を使用するVisualStateManager場合 (たとえば、 または 1 つの要素で UserControl をVisualStateManager使用する場合)、 メソッドをGoToElementState呼び出します。 どちらの場合も、 は、 VisualStateManager 関連する状態に関連付けられているストーリーボードを適切に開始および停止するために必要なロジックを実行します。 たとえば、コントロールが状態を定義し、 State1
それぞれにストーリーボードが関連付けられていると State2
します。 コントロールが にありState1
、 または GoToElementStateにGoToState渡State2
す場合、 は VisualStateManager でストーリーボードを開始し、 でState2
State1
ストーリーボードを停止します。
Windows Presentation Foundation (WPF) に含まれるコントロールは、 をVisualStateManager使用して表示状態を変更します。 WPF に含まれるコントロールの を作成ControlTemplateする場合は、コントロールControlTemplateの にオブジェクトを追加VisualStateして、コントロールの外観を特定の状態で指定できます。 WPF に含まれるコントロールの表示状態の名前を見つけるには、「 コントロールのスタイルとテンプレート」を参照してください。 コントロールのロジックは状態間の遷移を処理するため、新しい ControlTemplateでオブジェクトを定義する以外の操作をVisualState行う必要はありません。 既存のコントロールのコントロール テンプレートを作成する方法の詳細については、「 ControlTemplate を作成して既存のコントロールの外観をカスタマイズする」を参照してください。
状態間を遷移するための独自のロジックを実装する場合は、 を VisualStateManager継承し、 メソッドを GoToStateCore オーバーライドし、カスタム ロジックを VisualStateManager.CustomVisualStateManager 使用するコントロールに添付プロパティを設定する必要があります。
コンストラクター
VisualStateManager() |
VisualStateManager クラスの新しいインスタンスを初期化します。 |
フィールド
CustomVisualStateManagerProperty |
CustomVisualStateManager 依存関係プロパティを識別します。 |
VisualStateGroupsProperty |
VisualStateGroups 依存関係プロパティを識別します。 |
プロパティ
DependencyObjectType |
このインスタンスの DependencyObjectType CLR 型をラップする を取得します。 (継承元 DependencyObject) |
Dispatcher |
この Dispatcher が関連付けられている DispatcherObject を取得します。 (継承元 DispatcherObject) |
IsSealed |
このインスタンスが現在シールされている (読み取り専用である) かどうかを示す値を取得します。 (継承元 DependencyObject) |
添付プロパティ
CustomVisualStateManager |
コントロールの状態を遷移させる VisualStateManager オブジェクトを取得または設定します。 |
VisualStateGroups |
VisualStateGroup オブジェクトのコレクションを取得または設定します。 |
メソッド
適用対象
.NET
フィードバック
https://aka.ms/ContentUserFeedback」を参照してください。
以下は間もなく提供いたします。2024 年を通じて、コンテンツのフィードバック メカニズムとして GitHub の issue を段階的に廃止し、新しいフィードバック システムに置き換えます。 詳細については、「フィードバックの送信と表示