Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
.net 如何克隆动画笔刷?_.net_Wpf_Animation_Clone_Brush - Fatal编程技术网

.net 如何克隆动画笔刷?

.net 如何克隆动画笔刷?,.net,wpf,animation,clone,brush,.net,Wpf,Animation,Clone,Brush,我有一个动画对象,我想用这个笔刷 ColorAnimation ani = new ColorAnimation(Colors.White, TimeSpan.FromSeconds(1)) { RepeatBehavior = RepeatBehavior.Forever, AutoReverse = true }; SolidColorBrush brush1 = new SolidColorBrush(Colors.Black); brush1.BeginAnimation(SolidC

我有一个动画对象,我想用这个笔刷

ColorAnimation ani = new ColorAnimation(Colors.White, TimeSpan.FromSeconds(1))
{ RepeatBehavior = RepeatBehavior.Forever, AutoReverse = true };

SolidColorBrush brush1 = new SolidColorBrush(Colors.Black);
brush1.BeginAnimation(SolidColorBrush.ColorProperty, ani);

SolidColorBrush brush2 = brush1.Clone();

// brush2 is not an animated Brush

if (!brush2.HasAnimatedProperties)
    MessageBox.Show("I don't want this!");
正如MSDN库所述(Brush.Clone方法):

创建此笔刷的可修改克隆,对该对象的值进行深度复制。复制依赖项属性时,此方法复制资源引用和数据绑定(但它们可能不再解析),但不复制动画或其当前值

那么,克隆我的动画画笔的最佳方法是什么?
谢谢。

一个可靠的方法可能是扩展
笔刷
类,并在派生类中实现
ICloneable


然后,自定义的
Clone
方法可以处理需要克隆的任何对象的克隆。

一个可靠的方法可以是扩展
Brush
类,并在派生类中实现
ICloneable


然后,您的自定义
克隆
方法可以处理需要克隆的任何内容的克隆。

您需要在克隆上重新创建动画。没有其他方法。

您需要在克隆上重新创建动画。没有其他方法。

你能给我举个例子说明我的自定义克隆方法是如何实现的吗?IClonable是一个非常简单的接口。它公开了一个方法克隆,所以当您实现它时,您只需将从源对象获取属性/字段并创建其副本的代码放入其中,然后返回一个包含复制内容的新对象。实现细节实际上取决于您需要做什么以及您希望如何做。@usr您不能将SolidColorBrush扩展为密封的,但您肯定可以扩展笔刷。检查更好。正确。仍然无法使用衍生笔刷执行任何操作。它不起作用,因为WPF的本机部分不知道如何绘制它。出于这个原因,我认为他们会把这个问题列为内部问题。推导它毫无意义。老兄,我不是在帮你做作业。我提供了一些关于如何进行的理论和想法。鉴于SolidColorBrush是密封的,您不能以任何方式更改它。因此,要么构建自己的笔刷,要么从SolidColorBrush实例中手动获取所需内容,然后执行所需操作。你能给我举个例子说明如何实现自定义克隆方法吗?好的,iClonable是一个相当简单的接口。它公开了一个方法克隆,所以当您实现它时,您只需将从源对象获取属性/字段并创建其副本的代码放入其中,然后返回一个包含复制内容的新对象。实现细节实际上取决于您需要做什么以及您希望如何做。@usr您不能将SolidColorBrush扩展为密封的,但您肯定可以扩展笔刷。检查更好。正确。仍然无法使用衍生笔刷执行任何操作。它不起作用,因为WPF的本机部分不知道如何绘制它。出于这个原因,我认为他们会把这个问题列为内部问题。推导它毫无意义。老兄,我不是在帮你做作业。我提供了一些关于如何进行的理论和想法。鉴于SolidColorBrush是密封的,您不能以任何方式更改它。因此,要么构建自己的画笔,要么从SolidColorBrush实例中手动获取所需内容,然后执行所需操作。