4

I'm building a custom control in Silverlight and I want one of the fields to animate to the value of a DependencyProperty when that property is changed. More specifically, I have particular item in my Control Template that I want to animate to the color of the Background whenever the background changes color. So, what I have is:

<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 -->

I'm triggering the animation in the custom control code, but when the animation starts, it doesn't look like the Value is updating. I was just wondering if I'm missing something or if it is at all possible to apply TemplateBinding to resources in my ControlTemplate.

(I'm currently using a work-around of manually assigning the Background to the EasingColorKeyFrame Value, but the TemplateBinding solution would be so much cleaner.)

4

1 に答える 1

0

問題の可能な解決策として、ExpressionBlendサンプルをご覧ください。ControlTemplate内で使用して、探している効果を作成できるインタラクティブクラスがいくつかあります。ドキュメントは素晴らしいものではありませんが、オブジェクトブラウザでの説明はあなたにいくつかの手がかりを与えるはずです:)

たとえば、ControlStoryboardActionの動作を含むListBoxItemTemplateがあります。この動作のトリガーは、DataContextフィールドに特定の値が含まれている場合に起動するDataTriggerです。(私の場合、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(上記のリンクから入手できます。SL3の2009年7月のリリースを使用しています)
  3. <im:-Microsoft.Expression.Interactivity.Media
于 2010-08-10T00:58:21.667 に答える