2009-09-03 24 views
0

私はStateプロパティを持つViewModelと、背景ブラシを持つ単純な矩形を含むDatatemplateを持っています。 ViewModelの状態が変わるたびに、ブラシが現在持っている色で始まるアニメーションをトリガーし、新しい状態を表す新しい色にアニメートします。私はdatatriggersでこれを行っています。そして、それはほとんど動作します。私が持っている唯一の問題は、ブラシが現在持っている色から始めるのではなく、元に戻っていない基本色で始まるということです。これは、exitアクションでアニメーションを削除したためです。しかし、私がそれをしなければ、私は一度だけアニメーション化することができます。私は何が欠けていますか?プロパティ値に基づいてアニメーションを切り替えます

私が持っているもう1つの質問は、常に同じプロパティ(「状態」)にバインドする多くの異なるデータテンプレートでこの状態アニメーションが必要であり、常にSolidColorbrushをアニメーション化します。リソースやスタイルを使用してデータテンプレート間でこれらのデータトリガーアニメーションを共有できる方法はありますか?

<DataTemplate.Triggers> 
    <DataTrigger Binding="{Binding Path=State}" Value="Active"> 
     <DataTrigger.EnterActions> 
      <BeginStoryboard x:Name="activeStoryboard" HandoffBehavior="SnapshotAndReplace"> 
       <Storyboard> 
        <ColorAnimation To="Green" FillBehavior="HoldEnd" Duration="00:00:0.25" Storyboard.TargetName="stateBrush" Storyboard.TargetProperty="Color" /> 
       </Storyboard> 
      </BeginStoryboard> 
     </DataTrigger.EnterActions> 
     <DataTrigger.ExitActions> 
      <RemoveStoryboard BeginStoryboardName="activeStoryboard" /> 
     </DataTrigger.ExitActions> 
    </DataTrigger> 
    <DataTrigger Binding="{Binding Path=State}" Value="Error"> 
     <DataTrigger.EnterActions> 
      <BeginStoryboard x:Name="errorStoryboard" HandoffBehavior="SnapshotAndReplace"> 
       <Storyboard> 
        <ColorAnimation To="Red" FillBehavior="HoldEnd" Duration="00:00:0.25" Storyboard.TargetName="stateBrush" Storyboard.TargetProperty="Color" /> 
       </Storyboard> 
      </BeginStoryboard> 
     </DataTrigger.EnterActions> 
     <DataTrigger.ExitActions> 
      <RemoveStoryboard BeginStoryboardName="errorStoryboard" /> 
     </DataTrigger.ExitActions> 
    </DataTrigger> 
    <DataTrigger Binding="{Binding Path=State}" Value="Wait"> 
     <DataTrigger.EnterActions> 
      <BeginStoryboard x:Name="waitStoryboard" HandoffBehavior="SnapshotAndReplace"> 
       <Storyboard> 
        <ColorAnimation To="Yellow" FillBehavior="HoldEnd" Duration="00:00:0.25" Storyboard.TargetName="stateBrush" Storyboard.TargetProperty="Color" /> 
       </Storyboard> 
      </BeginStoryboard> 
     </DataTrigger.EnterActions> 
     <DataTrigger.ExitActions> 
      <RemoveStoryboard BeginStoryboardName="waitStoryboard" /> 
     </DataTrigger.ExitActions> 
    </DataTrigger> 
    <DataTrigger Binding="{Binding Path=State}" Value="Inactive"> 
     <DataTrigger.EnterActions> 
      <BeginStoryboard x:Name="inactiveStoryboard" HandoffBehavior="SnapshotAndReplace"> 
       <Storyboard> 
        <ColorAnimation To="Gray" FillBehavior="HoldEnd" Duration="00:00:0.25" Storyboard.TargetName="stateBrush" Storyboard.TargetProperty="Color" /> 
       </Storyboard> 
      </BeginStoryboard> 
     </DataTrigger.EnterActions> 
     <DataTrigger.ExitActions> 
      <RemoveStoryboard BeginStoryboardName="inactiveStoryboard" /> 
     </DataTrigger.ExitActions> 
    </DataTrigger> 
</DataTemplate.Triggers> 

答えて

0

私は完全にあなたの質問に答えることはできませんが、私は、少なくともあなたがストーリーボードを共有することができますが、私はDataTriggers自分自身についてよく分からないことを指摘することができます。しかし興味深い考え。 1つのバインディングを繰り返し使用することが多く、少なくとも1つのコントロールまたはXAML ResourceDictionaryで一度宣言して再利用する方法を見つけることを試みていたため、Bindingsについても同じことが考えられます。

関連する問題