2016-11-02 169 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]來改善問題。 –