【问题标题】:Animate dependency properties动画依赖属性
【发布时间】:2013-01-19 01:44:01
【问题描述】:

我有一个注册依赖属性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); }
    }
    ...

我使用这个属性来计算一些子控件的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>

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

启动故事板时没有输出或异常产生。

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

【问题讨论】:

  • 这两个代码段在哪里?它们是一种风格还是其他任何地方?
  • 类定义在一个单独的文件中。 &lt;local:VirtualPointer/&gt; 是窗口中网格的子元素。 &lt;Storyboard&gt;&lt;Window.Resources&gt; 中定义,提供 x:Key

标签: c# windows-runtime dependency-properties winrt-xaml


【解决方案1】:

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

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

【讨论】:

  • 太好了,谢谢。虽然这个属性看起来有点神秘。毕竟,UI 元素的属性可以在没有它的情况下进行动画处理。
  • 谢谢!浪费了很多时间试图弄清楚为什么故事板不起作用。
猜你喜欢
  • 2023-03-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-11-07
相关资源
最近更新 更多