Assign an element as the animation target in a con

2019-02-27 12:10发布

I'm trying to set an event trigger to one of my controls inside a ContentTemplate, i'm using a storyboard and a DoubleAnimation nested with a DoubleAnimationUsingKeyFrames when i set the storyboard TargetName to "ContentPopup" wich is a Grid i hold below, but i get an error telling me that:

The name 'ContentPopup' is not in the namespace 'System.Windows.Controls.Grid'.

The animation code on the control template is:

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

The code on the grid i need to animate is:

<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 says that the following needs to be done to make an object targetable

msdn help

and a grid is a FrameworkElement i want the animation to run on every single one of the controls i summon on my main window using this control template, they are a lot of them so i need to use the template. The question is:

Is there a way to assign the element as a target in the template?

1条回答
smile是对你的礼貌
2楼-- · 2019-02-27 12:56

So i found the right way to do it, even though grid is a FrameworkElement you can't access it from the control template, so you need to provide some binding or XAML reference to it in order to work, so with the same exact code just instead of using the Storyboard.TargetName property using the Storyboard.Target with value:

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

or also:

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

it worked for me

查看更多
登录 后发表回答