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 };
}
无需指定完整的属性路径。只需X
而不是整个(FrameworkElement.RenderTransform).(TranslateTransform.XProperty)
例如
transform.Animate(transform.X, 0, "X", 300, 0, new BounceEase()
{
Bounciness = 5,
Bounces = 2
});