我正在Silverlight中构建一个自定义控件,我希望其中一个字段在更改该属性时动画显示DependencyProperty的值。更具体地说,我在我的控制模板中有特定的项目,我希望每当背景改变颜色时动画为背景的颜色。所以,我所拥有的是:
<ControlTemplate TargetType="local:MyType">
<Grid x:Name="PART_RootElement">
<Grid.Resources>
<Storyboard x:Name="PART_FillAnimation">
<ColorAnimationUsingKeyFrames
BeginTime="00:00:00"
Storyboard.TargetName="PART_MainPath"
Storyboard.TargetProperty="(Shape.Fill).(SolidColorBrush.Color)">
<EasingColorKeyFrame
x:Name="PATH_FillKeyframe"
KeyTime="00:00:01"
Value="{TemplateBinding Background}"/>
</ColorAnimationUsingKeyFrames>
</Storyboard>
</Grid.Resources>
<!-- the rest of the template -->
我在自定义控件代码中触发动画,但是当动画启动时,它看起来不像Value正在更新。我只是想知道我是否遗漏了某些内容,或者是否可以将TemplateBinding应用于我的ControlTemplate中的资源。
(我目前正在使用手动将背景分配给EasingColorKeyFrame值,但TemplateBinding解决方案会更清晰。)
答案 0 :(得分:0)
请查看 Expression Blend Samples 作为您问题的可能解决方案。您可以在ControlTemplate中使用许多Interactivity类来创建您要查找的效果。文档不是很好,但对象浏览器中的描述应该为您提供更多线索:)
例如,我有一个包含ControlStoryboardAction行为的ListBox ItemTemplate。此行为的触发器是DataTrigger,它在DataContext字段包含特定值时触发。 (在我的情况下 Severity ==“High”)然后触发器在ItemTemplate中播放一个Storyboard。
<i:Interaction.Triggers>
<is:DataTrigger Binding="{Binding Severity, Mode=OneWay}" Value="High">
<im:ControlStoryboardAction Storyboard="{StaticResource flashLight}" IsEnabled="True" />
</is:DataTrigger>
引用了以下命名空间:
<i:
- System.Windows.Interactivity <is:
- Expression.Samples.Interactivity(可从上面的链接获得。我使用2009年7月发布的SL3)<im:
- Microsoft.Expression.Interactivity.Media