4

我正在 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 -->

我在自定义控件代码中触发了动画,但是当动画开始时,看起来值并没有更新。我只是想知道我是否遗漏了什么,或者是否有可能将 TemplateBinding 应用于我的 ControlTemplate 中的资源。

(我目前正在使用手动将背景分配给 EasingColorKeyFrame 值的解决方法,但 TemplateBinding 解决方案会更干净。)

4

1 回答 1

0

查看Expression Blend Samples作为解决您问题的可能方法。您可以在 ControlTemplate 中使用许多交互性类来创建您正在寻找的效果。文档不是很好,但是对象浏览器中的描述应该会给你更多的线索:)

例如,我有一个包含 ControlStoryboardAction 行为的 ListBox ItemTemplate。此行为的触发器是一个 DataTrigger,它在 DataContext 字段包含特定值时触发。(在我的情况下,当Severity=="High")触发器然后在 ItemTemplate 中播放情节提要。

<i:Interaction.Triggers>                                
<is:DataTrigger Binding="{Binding Severity, Mode=OneWay}" Value="High">
    <im:ControlStoryboardAction Storyboard="{StaticResource flashLight}" IsEnabled="True" />
</is:DataTrigger>

引用了以下命名空间:

  1. <i:- System.Windows.Interactivity
  2. <is:- Expression.Samples.Interactivity(可从上面的链接获得。我使用的是 2009 年 7 月发布的 SL3)
  3. <im:- Microsoft.Expression.Interactivity.Media
于 2010-08-10T00:58:21.667 回答