Windows runtime 自定义DependencyProperty不在动画上更新

Windows runtime 自定义DependencyProperty不在动画上更新,windows-runtime,winrt-xaml,Windows Runtime,Winrt Xaml,我正在将一个应用程序从WindowsPhone8Silverlight移植到WinRTXAML。我已经创建了一个自定义DependecProperty,我正在使用DoubleAnimation设置动画。这只在WP8上起作用,但在WinRT版本上不起作用 财产本身起作用;如果我在代码中手动设置它的值,就会调用change回调,一切正常。动画似乎运行良好;它将持续指定的持续时间,然后使用animpleted回调完成-但DependencyProperty不会更新,也不会调用其更改回调。我创建了一个计

我正在将一个应用程序从WindowsPhone8Silverlight移植到WinRTXAML。我已经创建了一个自定义DependecProperty,我正在使用DoubleAnimation设置动画。这只在WP8上起作用,但在WinRT版本上不起作用

财产本身起作用;如果我在代码中手动设置它的值,就会调用change回调,一切正常。动画似乎运行良好;它将持续指定的持续时间,然后使用animpleted回调完成-但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:

您需要在动画上设置为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.