2012-05-12 4 views
2

애니메이션 용 Brush 개체가 있는데 Clone이 브러시로 보내고 싶습니다.애니메이션 브러시를 복제하는 방법은 무엇입니까?

이 개체 값의 전체 복사본을 만들어이 브러쉬의 수정 가능한 복제본을 만듭니다 :

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 방법) 말했듯이

. 종속성 속성을 복사 할 때이 메서드는 리소스 참조와 데이터 바인딩을 복사하지만 더 이상 해결되지 않을 수도 있지만 애니메이션이나 현재 값은 복사하지 않습니다.

내 애니메이션 브러시를 복제하는 가장 좋은 방법은 무엇입니까? 감사합니다. .

답변

2

복제본에서 애니메이션을 재생성해야합니다. 다른 방법은 없습니다.

2

확고한 접근 방법은 Brush 클래스를 확장하고 파생 클래스에 ICloneable을 구현할 수 있습니다.

사용자 지정 Clone 메서드는 복제해야하는 모든 복제를 처리 할 수 ​​있습니다.

+0

내 사용자 지정 복제 메서드가 구현 된 방법의 예를 들어 줄 수 있습니까? – gliderkite

+0

글쎄, ICloneable은 다소 단순한 인터페이스입니다. 단일 메서드 Clone을 노출하므로 구현할 때 소스 개체의 속성/필드를 사용하는 코드를 넣고 해당 개체의 복사본을 만든 다음 복사 된 개체가있는 새 개체를 반환합니다. 구현 세부 사항은 실제로 수행해야 할 작업과 수행 방법에 따라 달라집니다. –

+0

@usr SolidColorBrush를 봉인으로 확장 할 수는 없지만 Brush를 확실히 확장 할 수 있습니다. 더 잘 확인하십시오. –

관련 문제