デザイナーが私にExpression BlendでデザインされたSilverlightの子ウィンドウを与え、Visual State Managerを使用して2つのモードを切り替えます。要するに、子ウィンドウには、クリックすると詳細な情報を含む別のGridコントロールがスライドされる展開ボタンがあります。VisualStateManagerを使用してコードから視覚状態に切り替える
この相互作用は、完全にXAMLで発生します。しかし、特定の条件が満たされた場合、つまり、ユーザーがいくつかのオプション、「常に詳細を表示する」を選択した場合、子供のウィンドウが開かれたときに拡張された視覚状態が有効になるように、この機能を拡張する必要があります。
私はこれを呼び出すのと同じくらい簡単だと思った:
VisualStateManager.GoToState(this, "VisualStateDetails", false);
しかし、それは動作しません。私は何が欠けていますか? (明らかに何かを見落としているとお詫びします。私はSilverlightには比較的新しく、Visual State Managerにはまったく慣れていません)
ここでは簡潔にするためにビットを削除したXAMLを示します。
<Grid x:Name="LayoutRoot" Margin="2" DataContext="{Binding ProjectNode, Mode=TwoWay}">
<VisualStateManager.VisualStateGroups>
<VisualStateGroup x:Name="EditorWindowStates">
<VisualStateGroup.Transitions>
<VisualTransition GeneratedDuration="0:0:0.5">
<VisualTransition.GeneratedEasingFunction>
<CubicEase EasingMode="EaseInOut"/>
</VisualTransition.GeneratedEasingFunction>
</VisualTransition>
</VisualStateGroup.Transitions>
<VisualState x:Name="VisualStateNormal"/>
<VisualState x:Name="VisualStateDetails">
<Storyboard>
<!-- snip -->
</Storyboard>
</VisualState>
</VisualStateGroup>
</VisualStateManager.VisualStateGroups>
<VisualStateManager.CustomVisualStateManager>
<ei:ExtendedVisualStateManager/>
</VisualStateManager.CustomVisualStateManager>
<!-- snip -->
そしてここでクリック、ボタンで、詳細を以下のように拡張します
<Button ...>
<i:Interaction.Triggers>
<i:EventTrigger EventName="Click">
<ei:GoToStateAction StateName="VisualStateDetails"/>
</i:EventTrigger>
</i:Interaction.Triggers>
</Button>
感謝を!
は、「グリッド」内でこの「ボタン」となっていますか?そうでない場合は、次のように状態を呼び出す必要があります。VisualStateManager.GoToState(LayoutRoot、 "VisualStateDetails"、false); – NestorArturo
私は今すぐコードにアクセスすることはできませんが、Buttonの位置は関係ありませんか?明確にするために、コードから、すなわち子ウィンドウの 'Initialize'メソッドで' VisualStateDetails'値に遷移したいと思います。そして、私は 'GoToState'への最初のパラメータとして' LayoutRoot'を使ってみましたが、Gridがコントロールではないというエラーがありました。 –
はい... VisualStateManagerを持つコントロールに応じてボタンの位置が重要です。コントロールの内部または外部にある場合は、構文が変更されます。 – NestorArturo