状態遷移をアニメーション化したい場合とそうでない場合があります。
現時点では、次のようなものがあります。
<Grid>
<Interactivity:Interaction.Behaviors>
<ic:DataStateBehavior Binding="{Binding Direction}" Value="Up" TrueState="Up_Direction" />
</Interactivity:Interaction.Behaviors>
<VisualStateManager.VisualStateGroups>
<VisualStateGroup x:Name="AnimatedStates">
<VisualStateGroup.Transitions>
<VisualTransition x:Name="transition" GeneratedDuration="0:0:1">
<VisualTransition.GeneratedEasingFunction>
<ElasticEase .../>
</VisualTransition.GeneratedEasingFunction>
</VisualTransition>
</VisualStateGroup.Transitions>
<VisualState x:Name="Up_Direction" >
<Storyboard>
<DoubleAnimation Duration="0" To="0" Storyboard.TargetProperty="(UIElement.RenderTransform).(RotateTransform.Angle)"
Storyboard.TargetName="pathArrow" />
</Storyboard>
</VisualState>
</VisualStateGroup>
</VisualStateManager.VisualStateGroups>
<Path x:Name="pathArrow" ...>
<Path.RenderTransform>
<RotateTransform Angle="90" />
</Path.RenderTransform>
</Path>
</Grid>
これはうまく機能しますが、状態遷移をアニメーション化するかどうかを制御する UseTransitions 依存関係プロパティが必要です。
UseTransitions プロパティの変更されたハンドラーで GeneratedDuration を 0 に設定するなど、いくつか試してみましたが、状態が既に変更された後に設定されているように見えるため、効果はありません。
DataTrigger を使用して GoToStateAction も試しましたが、変更時にのみトリガーされるように見え、DataContext の初期値は状態を正しく設定しません。
UseTransition プロパティを評価し、さまざまな状態をトリガーする DataStateBehaviour に ValueConverter を配置することを考えましたが、それは本当に醜い解決策のようです。
誰でもエレガントなソリューションを持っていますか?