Возможно ли использовать TemplateBinding в раскадровке в Silverlight? - PullRequest
4 голосов
/ 26 августа 2009

Я создаю пользовательский элемент управления в 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 будет намного чище.)

1 Ответ

0 голосов
/ 10 августа 2010

Взгляните на Образцы смеси Expression в качестве возможного решения вашей проблемы. Существует ряд классов интерактивности, которые вы можете использовать в ControlTemplate для создания эффекта, который вы ищете. Документация не очень хорошая, но описания в обозревателе объектов должны дать вам несколько подсказок:)

Например, у меня есть ListBox ItemTemplate, который содержит поведение ControlStoryboardAction. Триггер для этого поведения - это 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.Interacctivity (доступно по ссылке выше. Я использую июльскую версию 2009 года для SL3)
  3. <im: - Microsoft.Expression.Interactivity.Media
...