0

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

<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并为其颜色设置动画(但随后我得到与线程/冻结相关的异常)。

4

1 回答 1

1

根据MSDN

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

所以没有办法以命名样式部件为目标。

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


使用Storyboard.TargetProperty谷歌搜索词找到的结果

于 2012-10-10T14:12:33.187 回答