2014-12-26 2 views
0

Windows Phone 7의 gesture example app I found online에서 사용하는 다음 확장 방법이 있습니다. 내 응용 프로그램 용 8.1로 마이그레이션하려고 시도했지만 Storyboard.SetTargetProperty 메서드 호출 문제가 발생했습니다. Windows 8.1에서는 this signature is not supported 인 것으로 보입니다.Windows Phone 8.1에서 Storyboard.SetTargetProperty가 작동하지 않습니까?

나는 Windows Phone 개발에 대해 상당히 새롭고이 대신 사용해야하는 것이 무엇인지 알지 못한다. 누군가 달성 할 수있는 것을 제공하는 API의 메소드를 가르쳐 줄 수 있습니까? 이제 서명에 이전에 PropertyPath가 허용 된 문자열이 필요합니다. DP 속성을 나타내는 문자열로 DP 속성을 변환해야 할 필요가 있는지 모르겠습니까? DP 속성의 이름으로 설정된 문자열이 작동합니까?

public static void Animate(this DependencyObject target, double from, double to, 
         object propertyPath, int duration, int startTime, 
         Action completed = null) 
{ 
    var db = new DoubleAnimation(); 
    db.To = to; 
    db.From = from; 
    db.EasingFunction = new SineEase(); 
    db.Duration = TimeSpan.FromMilliseconds(duration); 
    Storyboard.SetTarget(db, target); 

    // Compiler error: This method signature is no longer supported. 
    Storyboard.SetTargetProperty(db, new PropertyPath(propertyPath)); 

    var sb = new Storyboard(); 
    sb.BeginTime = TimeSpan.FromMilliseconds(startTime); 

    if (completed != null) 
    { 
     sb.Completed += (s, e) => completed(); 
    } 

    sb.Children.Add(db); 
    sb.Begin(); 
} 

SetTargetProperty 호출에 전달 될 수있는 문자열의 TranslateTransform.YProperty 변환하는 방법을 확실하지이

TranslateTransform elementTrans = new TranslateTransform(); 
elementTrans.Animate(0, elementOffset, TranslateTransform.YProperty, 200, startTime, null, action); 

처럼 불려갑니다.

편집 문자열을 통해에서 속성 이름을 전달하는 방법을 보여줍니다

I have found some documentation on MSDN. 나는 그것을 올바르게 제공하고 있다고 생각하지는 않지만, 런타임 예외가 주어지면 속성을 찾을 수 없다. 내가 대신 객체의 propertyPath에 대한 문자열을 적용하는 방법 서명을 변경,하지만 난 내 원래의 게시물에서 그대로 위의 원본 소스를 유지하기 위해 원하는대로이 여기에 반영하지 않았다

 transform.Animate(transform.X, 0, "(FrameworkElement.RenderTransform).(TranslateTransform.XProperty)", 300, 0, new BounceEase() 
     { 
      Bounciness = 5, 
      Bounces = 2 
     }); 

참고.

RenderTransform

이 같은 TranslateTransform로 설정됩니다

public static void SetHorizontalOffset(this FrameworkElement element, double offset) 
    { 
     var transform = new TranslateTransform { X = offset }; 
     element.RenderTransform = transform; 
     element.Tag = new Offset { Value = offset, Transform = transform }; 
    } 

답변

0

당신은 전체 속성 경로를 지정할 필요가 없습니다. (FrameworkElement.RenderTransform).(TranslateTransform.XProperty) 대신 전체적으로 X이 (가) 있습니다.

transform.Animate(transform.X, 0, "X", 300, 0, new BounceEase() 
{ 
    Bounciness = 5, 
    Bounces = 2 
}); 
+1

감사합니다. –

+1

"TranslateTransform.X"도 작동한다는 점에 유의해야합니다. :) –

관련 문제