2009-05-12 30 views
3

ItemsControlのDataTemplateの中にグリッドがあるため、このグリッドのコピーがたくさんあります。グリッドをマウスでクリックして、DataTemplateの外側にある要素のストーリーボードをトリガーします。たとえば、Windowの別の場所にある名前付き要素のTransformプロパティをアニメートしたいとします。WPF:動的に作成されたコントロールのEventTriggerから名前で要素のアニメーションをトリガーする

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

とどこかに私の窓で、私はこのようになります四角形があります:

のは私の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のみのソリューションがあれば興味があります。

+1

私はこれにXAMLソリューションが見つかりませんでした。コードビハインドを使用する必要があります。また、ターゲットがグリッドの範囲内にあるべき理由を知りたいと思う。 –

答えて

1

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

ストーリーボードのネームバインディングは完全に別の動物かもしれませんが、おそらくこれを使用することができます。

関連する問題