WPF:为静态资源设置动画会更新使用该资源的其他控件

WPF:为静态资源设置动画会更新使用该资源的其他控件,wpf,animation,resources,static,Wpf,Animation,Resources,Static,我有两个文本框,它们的前景色使用相同的静态资源 当我应用改变第一个文本框颜色的动画时,第二个文本框上的颜色也会改变 如果不使用StaticResource,则不会发生这种情况,因此我猜测动画正在更改资源中定义的笔刷颜色,而不是第一个文本框上的前景色 这是我正在使用的代码 <Page.Resources> <SolidColorBrush x:Key="TextBrush" Color="Black" /> <

我有两个文本框,它们的前景色使用相同的静态资源

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

如果不使用StaticResource,则不会发生这种情况,因此我猜测动画正在更改资源中定义的笔刷颜色,而不是第一个文本框上的前景色

这是我正在使用的代码

<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>

正文一
文本二
这有什么关系吗


马特

通过在绑定中使用单个
静态资源
,更改动画中的
前景将更改资源本身。这种行为是经过设计的,因为任何其他行为都需要资源的完整副本,这将大大降低使用
StaticResource
的有用性和好处


当然,简单的解决方法是在此处不使用
静态资源,或者在每个文本框中使用单独的资源。

或者可能只是在资源上设置
x:Shared=“False”
。不过,我还没有对此进行验证。@Kent:“在WPF中,资源的默认x:Shared条件为true。这个条件意味着任何给定的资源请求都会返回相同的实例。”我认为这只是共享对笔刷的“引用”。若画笔是一个值类型,那个么它会工作,但在这里,我认为它不会有效果,因为它已经设置好了(默认情况下)。;)