动画依赖属性

Nic*_*ler 3 c# dependency-properties windows-runtime winrt-xaml

我有一个自定义用户控件,用于注册依赖项属性HoverHeight:

public sealed partial class VirtualPointer : UserControl
{
    public static readonly DependencyProperty HoverHeightProperty =
         DependencyProperty.Register("HoverHeight", typeof(double),
         typeof(VirtualPointer), new PropertyMetadata(1.0,OnHoverHeightChanged));

    public double HoverHeight
    {
        get { return (double)GetValue(HoverHeightProperty); }
        set { SetValue(HoverHeightProperty, value); }
    }
    ...
Run Code Online (Sandbox Code Playgroud)

我使用此属性来计算Margins一些子控件与一个相应的组合IValueConverter.

在使用此控件的页面中,我创建了一个Storyboard应该为该HoverHeight属性设置动画的页面:

<Page ...>
    <Page.Resources>
        <Storyboard>
            <DoubleAnimationUsingKeyFrames Storyboard.TargetName="virtualPointer" Storyboard.TargetProperty="HoverHeight">
                <LinearDoubleKeyFrame Value="1.0" KeyTime="0:0:0"/>
                <LinearDoubleKeyFrame Value="0.0" KeyTime="0:0:1"/>
                <LinearDoubleKeyFrame Value="1.0" KeyTime="0:0:2"/>
                <LinearDoubleKeyFrame Value="0.0" KeyTime="0:0:3"/>
                <LinearDoubleKeyFrame Value="1.0" KeyTime="0:0:4"/>
            </DoubleAnimationUsingKeyFrames>
            <!-- other DoubleAnimationUsingKeyFrames -->
        </Storyboard>
    </Page.Resources>
    <!-- ... -->
    <local:VirtualPointer Name="virtualPointer" HoverHeight="0.5"/>    
</Page>
Run Code Online (Sandbox Code Playgroud)

故事板包含其他动画,按预期工作.但是,当我启动故事板时,HoverHeight值不会改变.既不OnHoverHeightChanged调用处理程序,也不调用具有新值的转换器.我可以使用属性setter设置一个新值,而属性setter又调用OnHoverHeightChanged处理程序,因此动画可能存在问题.

启动故事板时没有生成输出或异常.

我在这里错过了什么吗?如何为自定义依赖项属性设置动画?

Vas*_*kov 9

将动画的EnableDependentAnimation属性设置为True.

默认情况下,依赖动画在Windows 8上根本不运行.默认情况下,它们是独立的动画(例如执行GPU转换的动画),因此您将无法在UI线程上接收更改通知.至少这是我的理解.