【发布时间】: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 处理程序,因此动画可能存在问题。
启动故事板时没有输出或异常产生。
我在这里遗漏了什么吗?如何为自定义依赖属性设置动画?
【问题讨论】:
-
这两个代码段在哪里?它们是一种风格还是其他任何地方?
-
类定义在一个单独的文件中。
<local:VirtualPointer/>是窗口中网格的子元素。<Storyboard>在<Window.Resources>中定义,提供x:Key。
标签: c# windows-runtime dependency-properties winrt-xaml