素敵なエレガントな解決策を見つけるのに苦労している比較的単純な質問です。n 秒ごとに更新される値を表示する列を持つグリッドがあります。値が変化したときにアニメーションを表示し、数値が負か正かによって異なる色でセルを点滅させたいと考えています。私が望むほとんどのことを行う多くのメソッドが見つかりましたが、私のニーズに完全に一致するものはありませんでした。
EventTrigger を使用すると、更新が発生するたびにセルをフラッシュできます。以下の比較的単純なアニメーションを使用します。しかし、ストーリーボードが UI 要素をフリーズするため、アニメーションが使用する色を条件付きにすることができないため、ストーリーボードでバインディングを使用して色を定義することはできません。
<EventTrigger RoutedEvent="Binding.TargetUpdated"> <BeginStoryboard HandoffBehavior="Compose" Name="GreenCell"> <Storyboard TargetProperty="(TextBlock.Background).(SolidColorBrush.Color)"> <ColorAnimation Duration="0:0:1.50" From="Green" To="Transparent" AutoReverse="False"/> </Storyboard> </BeginStoryboard> </EventTrigger>
DataTrigger を使用して、更新をこの Value に変換する Converter を作成し、値が負の場合は、データ トリガーをこれにバインドし、これが変化したときに背景色を設定することで、セルの色を条件付きにすることができます。ただし、数値がすでに負であり、負のままである (ただし変化する) 場合、トリガーは起動されません。
<DataTrigger Binding="{Binding Value, Converter={StaticResource cellBackGroundConverter}}" Value="True"> <DataTrigger.EnterActions> <BeginStoryboard HandoffBehavior="Compose" Name="GreenCell"> <Storyboard TargetProperty="(TextBlock.Background).(SolidColorBrush.Color)"> <ColorAnimation Duration="0:0:1.50" From="Green" To="Transparent" AutoReverse="False"/> </Storyboard> </BeginStoryboard> </DataTrigger.EnterActions> </DataTrigger> <DataTrigger Binding="{Binding Value, Converter={StaticResource cellBackGroundConverter}}" Value="False"> <DataTrigger.EnterActions> <BeginStoryboard HandoffBehavior="Compose" Name="RedCell"> <Storyboard TargetProperty="(TextBlock.Background).(SolidColorBrush.Color)"> <ColorAnimation Duration="0:0:1.50" From="Red" To="Transparent" AutoReverse="False"/> </Storyboard> </BeginStoryboard> </DataTrigger.EnterActions> </DataTrigger>
私が必要とするのは、すべての更新をキャプチャし、データトリガーの条件付き側面でアニメーションを再生するためのイベントトリガーのようです。
確かに私はここで単純なものを見逃しています。誰かが私をまっすぐにしてくれるのが大好きです!
どうもありがとう
マット