0

我正在尝试使用 Expression blend 为对象的边框颜色设置动画。

每当我将 Storyboard 中的边框值更改为我之前创建的画笔资源的值时,对象的基本边框都会更改,而不是动画。如果我将属性的值更改为基值(即:我不使用画笔资源),动画将按预期工作。

我们不能使用画笔资源为颜色属性设置动画吗?

下面是 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 替换为本地画笔资源的值?我应该用 DynamicResource / StaticResource 语句替换 Value="#FF5FA5C9" 语句吗?

4

2 回答 2

2

我可能会建议,而不是尝试为画笔资源设置动画,只需复制您的矩形形状并将其命名为 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>

不要问我为什么,但是对同一对象中的画笔资源进行动画处理并不会剪切它,但是您可以像这样完成您正在寻找的相同效果。

于 2012-01-06T14:58:32.163 回答
1

我相信我找到了问题所在。

由于某些原因,将笔画的值指定为本地画笔资源的值不会在动画的情节提要中创建关键帧:

以下是您不应该做的事情:

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

相反,您必须创建一个Color本地资源并像这样分配它:

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

故事板中的关键帧将被正确创建,动画将正常工作。

Expression Blend 中的错误可能吗?这是否正常工作?不知道 :)

于 2012-01-06T14:55:07.120 回答