16

私たちは使用できることを知っています

VisualStateManager.GoToState(this,"SomeState1",true);

SomeState1 に入りますが、コントロールがロードされた状態である no state のような基本状態に戻る方法を次に示します。

VisualStateManager.GoToState(this,"base",true); 

// OR

VisualStateManager.GoToState(this,"",true);

// OR

VisualStateManager.GoToState(this,null,true);

問題は、初期状態または基本状態に戻る方法がない場合、常に最初の状態を作成し、コンストラクターで制御の開始時に最初の状態に移動する必要があることです。

ドキュメントが見つからなかったので、すべての組み合わせを試していますが、機能するものは見つかりませんでした..

4

3 に答える 3

20

通常 != ベース。

Base は、視覚的な状態が適用される前 (つまり、VSM がアクティブになる前) のコントロールの初期状態です。

Expression ブログでこの記事を読んだ場合は、ここで取り上げた適切な説明があります。

... 独自のテンプレート化されたコントロールまたは UserControl を作成するときは、各状態グループで「既定」の状態を定義する必要があります。初期化時にコントロールをこれらの「デフォルト」状態に移動させ、遅延なく発生するように遷移を抑制して行います。状態グラフに配置されると、コントロールは状態遷移が発生する準備ができているので、状態グラフ内で遷移をトリガーするイベント ハンドラーを実装できます。

VSM ソース コードを簡単に見てみると、VSM から抜け出して元の基本状態に戻る方法はないように見えます。そうです、「通常」状態が必要です。:(

上記の解決策は理にかなっていますが、VSM 状態を簡単に削除できないことも少し面倒です。多分彼らはこれを将来修正するでしょう。

于 2009-10-14T13:36:39.450 に答える
16

これを行うには、まず「基本」状態を定義する必要があります。

取り決めは、ストーリーボードを含まない視覚的状態を定義する場合、この状態は実質的に「基本」状態 (コントロールが読み込まれた状態) と等しくなります。

<VisualStateGroup x:Name="TheGroup">  
    <VisualState x:Name="SomeState1">
       <Storyboard>
         ...
       </Storyboard>
    </VisualState>

    <VisualState x:Name="BaseState" /> <!-- Note: the VisualState tag is empty -->
</VisualStateGroup>

次に、その状態に切り替えます。

VisualStateManager.GoToState( this, "BaseState", true );
于 2009-10-16T16:06:17.267 に答える
5

デフォルトのコントロールは、CommonStates グループで「通常」の視覚状態を定義します。これは、マウスアウトなどで元に戻されます。カスタム コントロールであると想定するものについては、同じパターンに従う必要があると思います。

于 2009-10-02T08:43:50.077 に答える