WPF:为静态资源设置动画会更新使用该资源的其他控件
我有两个文本框,它们的前景色使用相同的静态资源 当我应用改变第一个文本框颜色的动画时,第二个文本框上的颜色也会改变 如果不使用StaticResource,则不会发生这种情况,因此我猜测动画正在更改资源中定义的笔刷颜色,而不是第一个文本框上的前景色 这是我正在使用的代码WPF:为静态资源设置动画会更新使用该资源的其他控件,wpf,animation,resources,static,Wpf,Animation,Resources,Static,我有两个文本框,它们的前景色使用相同的静态资源 当我应用改变第一个文本框颜色的动画时,第二个文本框上的颜色也会改变 如果不使用StaticResource,则不会发生这种情况,因此我猜测动画正在更改资源中定义的笔刷颜色,而不是第一个文本框上的前景色 这是我正在使用的代码 <Page.Resources> <SolidColorBrush x:Key="TextBrush" Color="Black" /> <
<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。这个条件意味着任何给定的资源请求都会返回相同的实例。”我认为这只是共享对笔刷的“引用”。若画笔是一个值类型,那个么它会工作,但在这里,我认为它不会有效果,因为它已经设置好了(默认情况下)。;)