3

ItemsControl の DataTemplate 内に Grid があるため、このグリッドのコピーが多数存在します。グリッドをマウスでクリックして、DataTemplate の外側の要素のストーリーボードをトリガーしたい。たとえば、ウィンドウ内の別の場所に存在する名前付き要素の Transform プロパティをアニメーション化したいと考えています。

私の 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 があります。

    <Rectangle x:Name="myRectangle" Height="400" Width="400">
        <Rectangle.RenderTransform>
            <TransformGroup>
                <ScaleTransform ScaleX="0" ScaleY="0" />
                <TranslateTransform />
            </TransformGroup>
        </Rectangle.RenderTransform>
    </Rectangle>

MouseLeftButtonUp イベントが発生すると、次の例外が発生します。

'myRectangle' 名が 'System.Windows.Controls.Grid' の名前スコープで見つかりません。

この名前で要素を探す場所をストーリーボードに伝える方法はありますか? xaml のみのソリューションが存在する場合、特に興味があります。

4

1 に答える 1

1

バインドしようとしている xaml 要素が親要素である限り、RelativeSource バインディングの FindAncestor モードを使用して、別の名前範囲 (つまり、データ テンプレートの外部) で xaml 要素を見つけることができます。バインディング コードは次のようになります。

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

ストーリーボードの名前バインディングはまったく別の動物かもしれませんが、おそらくこれを使用できます。

于 2009-05-28T16:08:29.053 に答える