制作相关性属性的动画
本文关键字:动画 属性 相关性 | 更新日期: 2023-09-27 17:57:45
我有一个自定义用户控件,用于注册依赖属性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
处理程序,也没有调用具有新值的转换器。我可以用属性setter设置一个新的值,它反过来调用OnHoverHeightChanged
处理程序,所以动画可能有问题。
启动情节提要时没有输出或生成异常。
我是不是遗漏了什么?如何设置自定义依赖项属性的动画?
将动画的EnableDependentAnimation属性设置为True。
默认情况下,相关动画根本不会在Windows8上运行。默认情况下,它们是独立的动画(例如执行GPU转换的动画),因此您将无法在UI线程上接收更改通知。至少这是我的理解。