我在Windows Phone 7的gesture example app I found online中使用了以下扩展方法。我正在尝试将其迁移到8.1以用于我的应用,但是遇到了Storyboard.SetTargetProperty
的问题方法调用。它似乎是Windows 8.1中的this signature is not supported。
我对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
的字符串而不是对象,但在此处没有反映出来,因为我希望将原始来源保留在原始帖子之上。
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 :(得分:0)
您不需要指定完整的属性路径。只需X
而不是整个(FrameworkElement.RenderTransform).(TranslateTransform.XProperty)
。
e.g。
transform.Animate(transform.X, 0, "X", 300, 0, new BounceEase()
{
Bounciness = 5,
Bounces = 2
});