.net WPF:从动态创建的控件上的EventTrigger按名称触发元素上的动画

.net WPF:从动态创建的控件上的EventTrigger按名称触发元素上的动画,.net,wpf,xaml,event-triggers,.net,Wpf,Xaml,Event Triggers,我在ItemsControl的DataTemplate中有一个网格,所以这个网格有很多副本。我希望在网格上单击鼠标,以触发DataTemplate外部元素的情节提要。例如,我希望为窗口中其他位置存在的命名元素的变换属性设置动画 假设我的数据模板如下所示: <DataTemplate x:Key="myDataTemplate"> <Grid> <Grid.Triggers> <

我在ItemsControl的DataTemplate中有一个网格,所以这个网格有很多副本。我希望在网格上单击鼠标,以触发DataTemplate外部元素的情节提要。例如,我希望为窗口中其他位置存在的命名元素的变换属性设置动画

假设我的数据模板如下所示:

    <DataTemplate x:Key="myDataTemplate">
        <Grid>
            <Grid.Triggers>
                <EventTrigger RoutedEvent="UIElement.MouseLeftButtonUp">
                    <BeginStoryboard>
                        <Storyboard Storyboard.TargetName="myRectangle">
                            <DoubleAnimation Storyboard.TargetProperty="(UIElement.RenderTransform).(TransformGroup.Children)[1].(TranslateTransform.X)"
                                                 To="10" Duration="0:0:0.2" />
                            <DoubleAnimation Storyboard.TargetProperty="(UIElement.RenderTransform).(TransformGroup.Children)[1].(TranslateTransform.Y)"
                                                 To="10" Duration="0:0:0.2" />
                            <DoubleAnimation Storyboard.TargetProperty="(UIElement.RenderTransform).(TransformGroup.Children)[0].(ScaleTransform.ScaleX)"
                                                 To="1" Duration="0:0:0.5" />
                            <DoubleAnimation Storyboard.TargetProperty="(UIElement.RenderTransform).(TransformGroup.Children)[0].(ScaleTransform.ScaleY)"
                                                 BeginTime="0:0:0.5" To="1" Duration="0:0:0.5" />
                        </Storyboard>
                    </BeginStoryboard>
                </EventTrigger>
            </Grid.Triggers>
        </Grid>
    </DataTemplate>
    <Rectangle x:Name="myRectangle" Height="400" Width="400">
        <Rectangle.RenderTransform>
            <TransformGroup>
                <ScaleTransform ScaleX="0" ScaleY="0" />
                <TranslateTransform />
            </TransformGroup>
        </Rectangle.RenderTransform>
    </Rectangle>

在我的窗口的某个地方有一个矩形,看起来像这样:

    <DataTemplate x:Key="myDataTemplate">
        <Grid>
            <Grid.Triggers>
                <EventTrigger RoutedEvent="UIElement.MouseLeftButtonUp">
                    <BeginStoryboard>
                        <Storyboard Storyboard.TargetName="myRectangle">
                            <DoubleAnimation Storyboard.TargetProperty="(UIElement.RenderTransform).(TransformGroup.Children)[1].(TranslateTransform.X)"
                                                 To="10" Duration="0:0:0.2" />
                            <DoubleAnimation Storyboard.TargetProperty="(UIElement.RenderTransform).(TransformGroup.Children)[1].(TranslateTransform.Y)"
                                                 To="10" Duration="0:0:0.2" />
                            <DoubleAnimation Storyboard.TargetProperty="(UIElement.RenderTransform).(TransformGroup.Children)[0].(ScaleTransform.ScaleX)"
                                                 To="1" Duration="0:0:0.5" />
                            <DoubleAnimation Storyboard.TargetProperty="(UIElement.RenderTransform).(TransformGroup.Children)[0].(ScaleTransform.ScaleY)"
                                                 BeginTime="0:0:0.5" To="1" Duration="0:0:0.5" />
                        </Storyboard>
                    </BeginStoryboard>
                </EventTrigger>
            </Grid.Triggers>
        </Grid>
    </DataTemplate>
    <Rectangle x:Name="myRectangle" Height="400" Width="400">
        <Rectangle.RenderTransform>
            <TransformGroup>
                <ScaleTransform ScaleX="0" ScaleY="0" />
                <TranslateTransform />
            </TransformGroup>
        </Rectangle.RenderTransform>
    </Rectangle>

当MouseLeftButtonUp事件触发时,我得到以下异常:

在“System.Windows.Controls.Grid”的名称范围中找不到“myRectangle”名称


有没有一种方法可以告诉故事板在何处使用此名称查找元素?如果存在仅xaml的解决方案,我特别感兴趣。

只要您尝试绑定的xaml元素是父元素,就可以使用RelativeSource绑定的FindAncestor模式在不同的名称范围(即数据模板的外部)中查找xaml元素。绑定代码如下所示:

{Binding Path="myRectangle", RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type Rectangle}}}

故事板中的名称绑定可能完全是另一种动物,但也许您可以使用它。

我还没有找到XAML解决方案,必须使用代码隐藏。我还想知道为什么目标应该在网格范围内。