Storyboard.SetTargetProperty 在 Windows phone 8.1 下不起作用

本文关键字:不起作用 phone SetTargetProperty Windows Storyboard | 更新日期: 2023-09-27 18:35:15

我有以下扩展方法,我正在使用我在网上找到的用于Windows Phone 7的手势示例应用程序。我正在尝试为我的应用程序将其迁移到 8.1,但遇到了 Storyboard.SetTargetProperty 方法调用的问题。Windows 8.1 似乎不支持此签名。

总的来说,我对Windows Phone开发相当陌生,不确定我应该用什么来代替它,有人可以指出API中的一种方法来提供它试图实现的目标吗?签名现在似乎需要一个字符串,以前允许使用属性路径。我不确定我需要做什么才能将 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调用的字符串。

编辑

我在 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 };
    }

Storyboard.SetTargetProperty 在 Windows phone 8.1 下不起作用

无需指定完整的属性路径。只需X而不是整个(FrameworkElement.RenderTransform).(TranslateTransform.XProperty)

例如

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