Изменить визуальное состояние и использовать переходы или нет на основе свойства зависимости - PullRequest
1 голос
/ 19 апреля 2011

У меня есть один элемент управления, который я иногда хочу анимировать переходом состояния, а иногда нет.

На данный момент у меня есть что-то вроде этого:

<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, которое контролирует, анимированы ли переходы этого состояния.

Я пробовал несколько вещей, таких как установка для GeneratedDuration значения 0 в обработчике изменения свойства UseTransitions, ноПохоже, что он устанавливается после того, как состояние уже изменилось, поэтому ничего не даетустановить правильное состояние.

Я думал о том, чтобы иметь ValueConverter в DataStateBehaviour, который оценивает свойство UseTransition и запускает различные состояния, но это кажется действительно уродливым решением.элегантное решение?

...