У меня есть следующий метод расширения, который я использую с 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 };
}
Это сработало отлично, спасибо! –
Не беспокойтесь, также следует отметить, что 'TranslateTransform.X' тоже будет работать. :) –