Window/WPF2011. 3. 4. 22:51
코드로 스토리보드를 작성하다보면

Storyboard.SetTargetProperty 를 사용하게 되는데요.

[ 함수 원형 ]
public static void SetTargetProperty(DependencyObject element, PropertyPath path)


정적 메소드로써
첫 번째 인자로  Timeline을 지정하고
두 번째 인자로 애니메이션을 적용할 종속성 속성 경로를 지정합니다.

보통 일반적인 프로퍼티를 설정하기 위해서는 다음과 같이 사용합니다.
Storyboard.SetTargetProperty(Timeline, new PropertyPath(FrameworkElement.OpacityProperty));


하지만,
RenderTransform 프로퍼티들을 설정하는 법은 약간 다릅니다.

1. 단일 속성일 경우

 RenderTransform = new ScaleTransform();

 
 
PropertyPath path = new PropertyPath("(0).(1)",

     new DependencyProperty[]
     { 
        
UIElement.RenderTransformProperty,
         ScaleTransform.ScaleXProperty

     });

 
Storyboard.SetTargetProperty(Timeline, path);


2. 다중 속성일 경우
 TransformGroup tg = new TransformGroup();

 tg.Children.Add(new ScaleTransform());

 tg.Children.Add(new RotateTransform());

 tg.Children.Add(new SkewTransform());

 tg.Children.Add(new TranslateTransform());

 

 RenderTransform = tg;

 PropertyPath path = new PropertyPath("(0).(1)[0].(2)",

     new DependencyProperty[]

     {

         UIElement.RenderTransformProperty,

         TransformGroup.ChildrenProperty,

         ScaleTransform.ScaleXProperty

     });

 Storyboard.SetTargetProperty(Timeline, path);


위의 두 소스는 비슷하지만 틀린점이 있다면
PropertyPath 함수의 첫 번째 인자로 들어가는 토큰화된 문자열과
TransformGroup.ChildrenProperty 가 추가된 점입니다.

 단일 속성일 경우엔 다음과 같이 지정이 되지만,

(0) : UIElement.RenderTransformProperty
(1) : ScaleTransform.ScaleXProperty

다중 속성일 경우엔 그룹 중 몇 번째 인지를 지정해야 주어야 합니다.
ScaleTransform 은 TransformGroup의 첫번째 자식임으로 [0] 을 지정하였습니다.

토큰화된 문자열만 잘 이해하신다면 쉽게 사용할 수 있습니다.

'Window > WPF' 카테고리의 다른 글

WPF Media Player ( Design. GomPlayer )  (0) 2012.03.12
Brush ColorAnimation  (0) 2011.06.22
ListBox ItemsPanel 변경하기  (0) 2011.03.04
Image Rotate  (4) 2010.11.04
[ WPF ] Custom Slider  (4) 2010.08.13
Posted by 열ㅇl