Назначить элемент в качестве цели анимации в шаблоне управления

Я пытаюсь установить триггер события для одного из моих элементов управления внутри ContentTemplate, я использую раскадровку и DoubleAnimation, вложенные с DoubleAnimationUsingKeyFrames, когда я устанавливаю для TargetName раскадровки значение "ContentPopup", которое является сеткой, которую я держу ниже, но я получаю сообщение об ошибке:

Имя ContentPopup отсутствует в пространстве имен System.Windows.Controls.Grid.

Код анимации на шаблоне управления:

<Grid Margin="0" Width="55" Height="40">
    <Grid.Triggers>
        <EventTrigger RoutedEvent="m:Pushpin.MouseDown">
            <BeginStoryboard>
                <Storyboard>
                    <DoubleAnimation Duration="00:00:00.5000000" Storyboard.TargetName="ContentPopup" Storyboard.TargetProperty="(UIElement.RenderTransform).(TransformGroup.Children)[0].(ScaleTransform.ScaleX)" To="1">
                    ...
                </Storyboard>
            </BeginStoryboard>
        </EventTrigger>
    </Grid.Triggers>
    ...
</Grid>

Код на сетке мне нужно анимировать:

<Grid Name="ContentPopup"
      Background="White"
      Opacity="0.85"
      RenderTransformOrigin="0,0">
    <Grid.RenderTransform>
        <TransformGroup>
            <ScaleTransform ScaleX="0" ScaleY="0"/>
            <SkewTransform/>
            <RotateTransform/>
            <TranslateTransform/>
        </TransformGroup>
     </Grid.RenderTransform>
    ...
 </Grid>

MSDN говорит, что необходимо сделать следующее, чтобы сделать объект нацеливаемым

MSDN помощь

и сетка - это FrameworkElement. Я хочу, чтобы анимация запускалась на каждом из элементов управления, которые я вызываю в моем главном окне, используя этот шаблон элемента управления, их много, поэтому мне нужно использовать шаблон. Вопрос в том:

Есть ли способ назначить элемент в качестве цели в шаблоне?

1 ответ

Решение

Поэтому я нашел правильный способ сделать это, хотя grid является FrameworkElement, к которому вы не можете получить доступ из шаблона элемента управления, поэтому вам нужно предоставить некоторую привязку или ссылку на XAML, чтобы он работал, поэтому с тем же точным кодом просто вместо использования свойства Storyboard.TargetName, используя Storyboard.Target со значением:

Storyboard.Target="{Binding ElementName=ContentPopup}"

или также:

Storyboard.Target="{x:Reference Name=ContentPopup}"

это сработало для меня

Другие вопросы по тегам