为高度嵌套的样式颜色设置动画

时间:2012-10-09 20:06:38

标签: wpf xaml animation

以下样式按预期工作(剥离不相关的道具):

<Style TargetType="PasswordBox">
    <Setter Property="Background">
        <Setter.Value>
            <VisualBrush>
                <VisualBrush.Visual>
                    <Canvas>
                        <Path>
                            <Path.Stroke>
                                <SolidColorBrush Color="{x:Static SystemColors.HighlightColor}"/>
                            </Path.Stroke>
                        </Path>
                    </Canvas>
                </VisualBrush.Visual>
            </VisualBrush>
        </Setter.Value>
    </Setter>
    <Style.Triggers>
        <EventTrigger RoutedEvent="FrameworkElement.GotFocus">
            <BeginStoryboard>
                <Storyboard>
                    <ColorAnimation Storyboard.TargetProperty="Background.Visual.Children[0].Stroke.Color"
                                    To="{x:Static SystemColors.WindowColor}"/>
                </Storyboard>
            </BeginStoryboard>
        </EventTrigger>
    </Style.Triggers>
</Style>

...但我怀疑这是最好的方法。这里有一个丑陋的事情是ColorAnimation必须从PropertyPath一直到笔画颜色进行长PasswordBox次遍历。

有没有办法缩写或整理这段代码?有没有办法重构它,以便PropertyPath遍历更短?

到目前为止,我已经尝试将故事板移动到Path.Resources(但后来我无法从Style.Triggers引用它);并在Style.Resources中放置共享画笔并为其颜色设置动画(但后来我得到与线程/冻结相关的异常)。

1 个答案:

答案 0 :(得分:1)

根据MSDN

  

...只有定义样式的框架元素才能直接定位。

因此无法定位命名样式部分。

它建议您从样式目标向下点到要更改的属性,这就是您所做的。鉴于此,我认为这是你能做到的最好的。


使用Storyboard.TargetProperty作为Google搜索字词找到的结果