我正在将一个应用程序从Windows 8 (Silverlight)移植到WinRT-XAML。我已经创建了一个自定义DependecyProperty
,我正在使用DoubleAnimation动画。这只在WP8上有效,但在WinRT版本上不起作用。
属性本身也能工作;如果我在代码中手动设置它的值,就会调用更改回调,并且一切都正常。动画似乎也在运行;它持续指定的持续时间,然后使用AnimCompleted
回调完成--但是DependencyProperty
没有更新,它的更改回调也没有被调用。我创建了一个计时器,用于在动画运行时打印出动画属性的值,并且它保持不变。
我做错了什么?与WinRT相比,WP8有什么不同?
财产定义:
public static readonly DependencyProperty MyPropProperty =
DependencyProperty.Register( "MyProp", typeof(double), typeof(MyClass),
new PropertyMetadata( 1d, OnMyPropChanged ));
public double MyProp
{
get { return (double)GetValue( MyPropProperty ); }
set { SetValue( MyPropProperty, value ); }
}
private static void OnMyPropChanged( DependencyObject d, DependencyPropertyChangedEventArgs e )
{
var m = d as MyClass;
System.Diagnostics.Debug.WriteLine( "Value now: " + m.MyProp );
}
XAML:
<Storyboard x:Name="AnimSB" Completed="AnimCompleted">
<DoubleAnimation x:Name="Anim" Storyboard.TargetProperty="MyProp" Duration="0:0:1.00">
<DoubleAnimation.EasingFunction>
<QuadraticEase EasingMode="EaseInOut"/>
</DoubleAnimation.EasingFunction>
</DoubleAnimation>
</Storyboard>
启动动画的代码:
MyProp = 2.0; // this causes a call to OnMyPropChanged just fine
Anim.From = 2.0;
Anim.To = 1.0;
Storyboard.SetTarget( Anim, this );
AnimSB.Begin();
// after this, MyProp stays constant, OnMyPropChanged is not called,
// and AnimCompleted is called after exactly one second.
发布于 2014-10-03 14:51:37
您需要在动画上将EnableDependentAnimation
设置为true。其原因是不鼓励在UI线程上更改动画属性(依赖属性),从而产生不稳定的动画。建议只对独立属性(如RenderTransform
属性或Opacity
属性)进行动画化,而不使用依赖属性(如Width
、Margin
、Canvas.X
或自定义属性)。
https://stackoverflow.com/questions/26179519
复制相似问题