2014-12-26 5 views
0

У меня есть следующий метод расширения, который я использую с gesture example app I found online для Windows Phone 7. Я пытаюсь перенести его на 8.1 для своего приложения, но столкнулся с проблемами с вызовом метода Storyboard.SetTargetProperty. Похоже, что this signature is not supported в Windows 8.1.Storyboard.SetTargetProperty не работает под Windows phone 8.1?

Я довольно новичок в разработке Windows Phone в целом и не уверен, что я должен использовать вместо этого, может ли кто-нибудь указать мне на метод в API, который обеспечивает то, чего это пытается достичь? Похоже, что подписи теперь требуется строка, где ранее разрешалось свойство PropertyPath. Я не уверен, что мне нужно сделать, чтобы преобразовать свойство 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(); 
} 

Вызванный как этот

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

Не уверен, как преобразовать TranslateTransform.YProperty, чтобы строка, которая может быть передаваемым в SetTargetProperty вызова.

Редактировать

Я have found some documentation on MSDN, который показывает, как передать имя свойства через строку. Я не думаю, что я предоставляю его правильно, хотя, поскольку я получаю исключение во время выполнения, что он не может найти предоставленное свойство.

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

Обратите внимание, что я изменил метод подпись принять строку для propertyPath вместо объекта, но не отражает, что здесь, как я хотел, чтобы сохранить оригинальный источник выше как есть от моей должности.

The 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

Вам не нужно указывать полный путь к собственности. Просто используйте X вместо всего (FrameworkElement.RenderTransform).(TranslateTransform.XProperty).

например.

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

Это сработало отлично, спасибо! –

+1

Не беспокойтесь, также следует отметить, что 'TranslateTransform.X' тоже будет работать. :) –

Смежные вопросы