根据依赖项属性更改可视状态并使用转换

时间:2011-04-19 15:40:40

标签: silverlight animation silverlight-4.0 visualstatemanager

我有一个控件,我有时想要设置状态转换的动画,有时我不想。

目前我有这样的事情:

<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属性并触发不同的状态,但这似乎是一个非常难看的解决方案。

任何人都有优雅的解决方案吗?

0 个答案:

没有答案