我有一个控件,我有时想要设置状态转换的动画,有时我不想。
目前我有这样的事情:
<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的初始值没有正确设置状态。
我曾考虑在DataStateBehaviour上使用ValueConverter来评估UseTransition属性并触发不同的状态,但这似乎是一个非常难看的解决方案。
任何人都有优雅的解决方案吗?