WPF:动画一个StaticResource更新使用该资源的其他控件

时间:2011-02-01 17:37:58

标签: wpf animation resources static

我有两个TextBox,它们的前景色使用相同的StaticResource。

当我应用改变第一个TextBox颜色的动画时,第二个TextBox上的颜色也会改变。

如果我不使用StaticResource,这不会发生,所以我猜测动画正在改变资源中定义的画笔的颜色,而不是第一个TextBox上的前景色。

这是我正在使用的代码;

<Page.Resources>
    <SolidColorBrush x:Key="TextBrush"
                     Color="Black" />

    <Storyboard x:Key="Glow"
                TargetProperty="Foreground.Color"
                Storyboard.TargetName="txt1">
        <ColorAnimation To="Blue"
                        Duration="0:0:0.1" />
    </Storyboard>
    <Storyboard x:Key="Normal"
                TargetProperty="Foreground.Color"
                Storyboard.TargetName="txt1">
        <ColorAnimation To="Yellow"
                        Duration="0:0:0.1" />
    </Storyboard>
</Page.Resources>

<StackPanel>
    <StackPanel.Triggers>
        <EventTrigger RoutedEvent="StackPanel.MouseEnter">
            <BeginStoryboard Storyboard="{StaticResource Glow}" />
        </EventTrigger>
        <EventTrigger RoutedEvent="StackPanel.MouseLeave">
            <BeginStoryboard Storyboard="{StaticResource Normal}" />
        </EventTrigger>
    </StackPanel.Triggers>

    <TextBlock Name="txt1"
               Foreground="{StaticResource TextBrush}">Text One</TextBlock>
    <TextBlock Name="txt2"
               Foreground="{StaticResource TextBrush}">Text Two</TextBlock>
</StackPanel>

到底有没有?

马特

1 个答案:

答案 0 :(得分:3)

通过在绑定中使用单个StaticResource,更改动画中的Foreground将更改资源本身。这种行为是设计的,因为其他任何东西都需要完整的资源副本,这将极大地降低了首先使用StaticResource的实用性和好处。

当然,简单的解决方法是不在此处使用StaticResource,或者在每个TextBox中使用单独的资源。