我有一个自定义用户控件,用于注册依赖项属性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设置一个新值,该属性setter又调用OnHoverHeightChanged
处理程序,因此动画可能存在问题。
启动情节提要时没有产生输出或异常。
我在这里遗漏了什么吗?如何为自定义依赖项属性设置动画?
答案 0 :(得分:9)
将动画的EnableDependentAnimation属性设置为True。
默认情况下,依赖动画在Windows 8上根本不运行。默认情况下,它们是独立的动画(例如执行GPU变换的动画),因此您将无法在UI线程上接收更改通知。至少这是我的理解。