2012-04-18 15 views
6

ラップパネルに複数のユーザーコントロールを作成しています。私はusercontrolにバインドされたビューモデルを持っており、ビューモデルのプロパティにトリガされたアニメーションを持っています。非常にシンプルなトグルカラーで赤から透明に変わります。WPFのユーザーコントロール間でアニメーションを同期する方法

<Storyboard x:Key="alertAnimation" RepeatBehavior="Forever" AutoReverse="True" > 
    <ColorAnimationUsingKeyFrames Storyboard.TargetProperty="(Border.BorderBrush).(SolidColorBrush.Color)" 
            Storyboard.TargetName="TileBorder" 
            BeginTime="00:00:00" 
            RepeatBehavior="Forever" 
            AutoReverse="True" 
            > 
     <DiscreteColorKeyFrame Value="Red"/> 
     <DiscreteColorKeyFrame KeyTime="00:00:00.500" Value="Transparent" /> 
    </ColorAnimationUsingKeyFrames> 

</Storyboard> 

これはうまくいきます。しかし、私は複数のユーザーコントロールを非同期にロードするので、点滅しているアニメーションは同期していないので、それらはすべて異なるタイミングで点滅します。画面上で点滅するものは、すべて同じ速度/時間で点滅する必要があります。これらのアニメーションを同期する方法はありますか?私が達成しようとしているものに合った例はどこにもないようです。 ParallelTimelineを使用し、すべてのアニメーションを追加し、単一のコントローラから開始/停止する方法はありますか?どのようにそこにこれを達成するためにどのような例ですか?

EDIT 4/20 アニメーションがstyle.xamlファイルで定義され、各コントロールが「点滅」アニメーションを追加してメインUIにストーリーボードを開始させる「グローバル」ストーリーボードがある方がよいでしょうか?

+0

なぜコントロールを非同期に読み込む必要がありますか? – Paparazzi

+0

本当に見た目です。私はそれらを同期して読み込んだら、すべてのコントロールがロードされるまでアプリケーションがハングアップしたように見えました。また、すべての初期ユーザーコントロールがロードされると、それが表すデバイスがオンラインになると、いつでも別のユーザーコントロールが表示される可能性があります。私はその事件も解決する必要があると思った。 – mdutra

+0

シンプルなアニメーションのようですが、私はキーフレーム上の離散を試みます。 – Paparazzi

答えて

0

明らかに、これは変更する必要がありますが、色の遷移で0の時間をおいて試してみると、オーバーヘッドが少なくなります。それはできないかもしれません。試してみるだけです。

<Rectangle Name="MyRectangle" Width="100" Height="100"> 
     <Rectangle.Fill> 
      <SolidColorBrush x:Name="MySolidColorBrush" Color="Blue" /> 
     </Rectangle.Fill> 
     <Rectangle.Triggers> 
      <EventTrigger RoutedEvent="Rectangle.MouseEnter"> 
       <BeginStoryboard> 
        <Storyboard> 
         <DoubleAnimation 
      Storyboard.TargetName="MyRectangle" 
      Storyboard.TargetProperty="Width" 
      From="100" To="200" Duration="0:0:1" /> 

         <ColorAnimation 
      Storyboard.TargetName="MySolidColorBrush" 
      Storyboard.TargetProperty="Color" 
      From="Blue" To="Red" BeginTime="0:0:1" Duration="0:0:0" /> 
        </Storyboard> 
       </BeginStoryboard> 
      </EventTrigger> 
     </Rectangle.Triggers> 
    </Rectangle> 
3

私はので、私は、ユーザーコントロールにアニメーションを使用していないことになったが、代わりに、単に静的オブジェクト内のDependencyPropertyを変更し、そのすべてのユーザーコントロールを持つようにアニメーションを使用する複数のユーザーコントロール上の複数のアニメーションを制御するための良い方法を見つけることができませんでしたそのプロパティにバインドするいくつかの方法で点滅する必要があります。私が望む望みの結果を生み出す方法はいろいろありますが、瞬きがいつ起きているのかを知るためのコントロールがすべてのコントロールに与えられています。

私は以下のサイトからのアイデアやサンプルコードを得た:私はそれにいくつかの変更をしたが、全体的に、それは私がそれを行うために必要な正確に何をやった How to synchronize animations across usercontrols in wpf

+0

これは私が現時点で行っていることです。私はアニメーションを使うことを望んでいました。まぁ。 –

関連する問題