2011-02-01 27 views
3

我有两个文本框使用相同的StaticResource作为其前景色。WPF:动画StaticResource更新使用该资源的其他控件

当我应用改变第一个文本框的颜色的动画时,第二个文本框的颜色也发生了变化。

如果我不使用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> 

反正有这个吗?

马特

回答

3

通过结合使用单一StaticResource,改变你的动画将改变资源本身的Foreground。这种行为是有目的的,因为其他任何事情都需要完整的资源副本,这将极大地降低首先使用StaticResource的用处和好处。

简单的解决方法,当然是不使用StaticResource这里,或使用文本框每一个单独的资源。

+0

或者只是在资源上设置`x:Shared =“False”`。虽然没有验证过。 – 2011-02-01 17:57:48