Windows runtime 自定义DependencyProperty不在动画上更新
我正在将一个应用程序从WindowsPhone8Silverlight移植到WinRTXAML。我已经创建了一个自定义DependecProperty,我正在使用DoubleAnimation设置动画。这只在WP8上起作用,但在WinRT版本上不起作用 财产本身起作用;如果我在代码中手动设置它的值,就会调用change回调,一切正常。动画似乎运行良好;它将持续指定的持续时间,然后使用animpleted回调完成-但DependencyProperty不会更新,也不会调用其更改回调。我创建了一个计时器,以便在动画运行时打印动画属性的值,并且该值保持不变 我做错了什么?WinRT与WP8有什么不同 属性定义:Windows runtime 自定义DependencyProperty不在动画上更新,windows-runtime,winrt-xaml,Windows Runtime,Winrt Xaml,我正在将一个应用程序从WindowsPhone8Silverlight移植到WinRTXAML。我已经创建了一个自定义DependecProperty,我正在使用DoubleAnimation设置动画。这只在WP8上起作用,但在WinRT版本上不起作用 财产本身起作用;如果我在代码中手动设置它的值,就会调用change回调,一切正常。动画似乎运行良好;它将持续指定的持续时间,然后使用animpleted回调完成-但DependencyProperty不会更新,也不会调用其更改回调。我创建了一个计
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:
您需要在动画上设置为true。其原因是不鼓励对UI线程相关属性上更改的属性设置动画,从而生成起伏的动画。建议仅设置独立属性(如RenderTransform属性或不透明度)的动画,而不设置宽度、边距、Canvas.X或自定义属性等相关属性的动画。您需要在动画中设置为true。其原因是不鼓励对UI线程相关属性上更改的属性设置动画,从而生成起伏的动画。建议仅设置独立属性(如RenderTransform属性或不透明度)的动画,而不设置相关属性(如宽度、边距、Canvas.X或自定义属性)的动画
<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.