2016-11-02 123 views
2

我在wpf中有一个椭圆对象。当某些触发I所示推出下面wpf动画更改资源

<ColorAnimationUsingKeyFrames Storyboard.TargetProperty="(Shape.Fill).(SolidColorBrush.Color)" Storyboard.TargetName="outterEllipse"> 
      <EasingColorKeyFrame KeyTime="0" Value="{DynamicResource MainBlueColor}"> 
       <EasingColorKeyFrame.EasingFunction> 
        <CircleEase EasingMode="EaseIn"/> 
       </EasingColorKeyFrame.EasingFunction> 
      </EasingColorKeyFrame> 
      <EasingColorKeyFrame KeyTime="0:0:0.5" Value="White"/> 
     </ColorAnimationUsingKeyFrames> 

我的椭圆定义的故事板的动画是

<Ellipse x:Name="outterEllipse" Fill="{DynamicResource MainBlueSolidColorBrush}"> 

哪里MainBlueSolidColorBrush是某处定义的一刷。

<SolidColorBrush Color="{DynamicResource MainBlueColor}" x:Key="BlueSolidColorBrush" x:Name="BlueSolidColorBrush" ></SolidColorBrush> 

问题

当故事板运行具有相同刷变化,以及其他元件。这似乎是动画正在改变资源,而不仅仅是该对象的值。有没有解决方案来阻止这种情况的发生?

回答

1

看起来像动画正在改变资源,而不是只为该对象的值。

默认情况下,当您声明资源时,该对象只创建一次,并在引用该资源的每个位置共享。所以在你的例子中,每个使用该资源的元素都指向同一个对象。

有没有解决方法?

没有一个好的Minimal, Complete, and Verifiable code example,不可能确定需要什么来解决您的问题。

共享行为可以修改。您可以将x:Shared="false"添加到资源声明中。这将告诉WPF每个对资源的引用都应该获得自己的声明资源副本,而不是与其他引用元素共享。

根据您发布的代码,我希望这适用于您的情况。例如。改变资源的声明是这样的:

<SolidColorBrush x:Key="MainBlueSolidColorBrush" x:Shared="false" ... /> 

如果不解决您的方案,请通过提供良好的MCVE可靠地重现问题提高你的问题。

+0

我试过了,但资源仍然在变化。 –

+1

然后,您应该通过提供可靠地再现问题的良好[mcve]来改善问题。 –