Назначить элемент в качестве цели анимации в шаблоне управления
Я пытаюсь установить триггер события для одного из моих элементов управления внутри 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 говорит, что необходимо сделать следующее, чтобы сделать объект нацеливаемым
и сетка - это FrameworkElement. Я хочу, чтобы анимация запускалась на каждом из элементов управления, которые я вызываю в моем главном окне, используя этот шаблон элемента управления, их много, поэтому мне нужно использовать шаблон. Вопрос в том:
Есть ли способ назначить элемент в качестве цели в шаблоне?
1 ответ
Поэтому я нашел правильный способ сделать это, хотя grid является FrameworkElement, к которому вы не можете получить доступ из шаблона элемента управления, поэтому вам нужно предоставить некоторую привязку или ссылку на XAML, чтобы он работал, поэтому с тем же точным кодом просто вместо использования свойства Storyboard.TargetName, используя Storyboard.Target со значением:
Storyboard.Target="{Binding ElementName=ContentPopup}"
или также:
Storyboard.Target="{x:Reference Name=ContentPopup}"
это сработало для меня