Невозможно анимировать границу объекта в Expression Blend, используя ресурсы кисти - PullRequest
0 голосов
/ 06 января 2012

Я пытаюсь анимировать цвет границы объекта, используя смесь Expression.

Всякий раз, когда я изменяю значение границы в раскадровке на значение ресурса кисти, который я создал ранее, вместо него изменяется базовая граница объекта.быть анимированнымЕсли я изменю значение свойства на базовое значение (т. Е. Я не использую ресурс кисти), анимация будет работать так, как задумано.

Разве мы не можем анимировать свойства цвета, используя ресурсы кисти?

Вот код, сгенерированный Expression Blend, когда используется жестко закодированное значение цвета для границы (этот код работает, анимация воспроизводится правильно, но значение границы жестко закодировано):

<Style x:Key="StandardTextBoxStyle" BasedOn="{x:Null}" TargetType="{x:Type TextBox}">
    (...)
    <Setter Property="Template">
        <Setter.Value>
            <ControlTemplate TargetType="{x:Type TextBox}">
                <Grid x:Name="grid">
                    <VisualStateManager.VisualStateGroups>
                        <VisualStateGroup x:Name="CommonStates">
                        (...)
                        </VisualStateGroup>
                        <VisualStateGroup x:Name="FocusStates">
                            <VisualStateGroup.Transitions>
                                <VisualTransition GeneratedDuration="0" To="Focused">
                                    <Storyboard>
                                        <ColorAnimationUsingKeyFrames Storyboard.TargetProperty="(Shape.Stroke).(SolidColorBrush.Color)" Storyboard.TargetName="rectangle">
                                            <EasingColorKeyFrame KeyTime="0" Value="#FFC2C2C2"/>
                                            <EasingColorKeyFrame KeyTime="0:0:0.2" Value="#FF5FA5C9"/>
                                        </ColorAnimationUsingKeyFrames>
                                    </Storyboard>
                                </VisualTransition>
                            </VisualStateGroup.Transitions>
                            <VisualState x:Name="Unfocused"/>
                            <VisualState x:Name="Focused"/>
                        </VisualStateGroup>
                    </VisualStateManager.VisualStateGroups>
                    (...)
</Style>

Как заменить жестко закодированное значение # FF5FA5C9 значением локального ресурса кисти?Стоит ли просто заменить инструкцию Value = "# FF5FA5C9" на инструкцию DynamicResource / StaticResource?

Ответы [ 2 ]

2 голосов
/ 06 января 2012

Я мог бы порекомендовать вместо того, чтобы пытаться анимировать ресурс кисти, просто сделайте еще одну копию вашей прямоугольной формы и назовите ее как Rectangle_Focused и расположите ее по порядку над существующим прямоугольником, чтобы он отображался над исходным прямоугольником.

Добавьте ресурс кисти границы к этой фигуре, а затем установите видимость фигур как свернутую. Затем в вашем сфокусированном состоянии или состоянии наведения мыши, или как вам угодно, измените его видимость обратно на видимую. Вроде как;

<VisualState x:Name="Focused">
                                    <Storyboard>
                                        <DoubleAnimation Duration="0:0:0.1" To="1" Storyboard.TargetProperty="(UIElement.Opacity)" Storyboard.TargetName="FocusVisualElement" d:IsOptimized="True"/>
                                        <DoubleAnimation Duration="0" To="1" Storyboard.TargetProperty="(UIElement.Opacity)" Storyboard.TargetName="MouseOverBorder" d:IsOptimized="True"/>
                                        <ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="(UIElement.Visibility)" Storyboard.TargetName="Background_Copy">
                                            <DiscreteObjectKeyFrame KeyTime="0">
                                                <DiscreteObjectKeyFrame.Value>
                                                    <Visibility>Visible</Visibility>
                                                </DiscreteObjectKeyFrame.Value>
                                            </DiscreteObjectKeyFrame>
                                        </ObjectAnimationUsingKeyFrames>
                                    </Storyboard>
                                </VisualState>

Не спрашивайте меня, почему, но анимация ресурса кисти в том же объекте просто не обрезает его, но вы можете добиться того же эффекта, который вы ищете, хотя бы вот так.

1 голос
/ 06 января 2012

Мне кажется, я обнаружил проблему.

По некоторым причинам назначение значения штриха как локального ресурса Brush не создает ключевой кадр в раскадровке анимации:

Вот что НЕ следует делать:

http://i.imgur.com/5X7Xm.jpg

Вместо этого вам нужно создать локальный ресурс Color и назначить его следующим образом:

http://i.imgur.com/UGIOl.jpg

Ключевой кадр в раскадровке будет создан правильно, и анимация будет работать.

Возможно, ошибка в Expression Blend?Это работает как надо?Понятия не имею:)

...