gpt4 book ai didi

c# - wpf动画改变资源

转载 作者:太空宇宙 更新时间:2023-11-03 12:37:25 25 4
gpt4 key购买 nike

我在 wpf 中有一个椭圆对象。在某些触发条件下,我启动了如下所示的 Storyboard 动画

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

问题

当 Storyboard运行时,具有相同画笔的其他元素也会发生变化。看起来动画正在改变资源,而不仅仅是该对象的值。有什么解决方案可以阻止这种情况发生吗?

最佳答案

It seems like the animation is changing the resource and not the value for that object only.

默认情况下,当您声明一个资源时,该对象只创建一次,并在引用该资源的每个地方共享。因此,在您的示例中,使用该资源的每个元素都引用同一个对象。

Is there any solution to this?

没有好的Minimal, Complete, and Verifiable code example ,无法确定需要什么来解决您的问题。

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

根据您发布的代码,我希望这适用于您的情况。例如。将资源声明更改为类似以下内容:

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

如果这不能解决您的情况,请通过提供可靠地重现问题的良好 MCVE 来改进您的问题。

关于c# - wpf动画改变资源,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40391622/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com