2

相对简单的问题,我正在努力寻找一个很好的优雅解决方案。我有一个网格,其中有一列显示每 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,我可以通过创建一个将更新转换为此值以及该值是否为负的转换器来使单元格颜色成为条件,然后将数据触发器绑定到该值并在该值更改时设置背景颜色。但是,如果数字已经是负数,并且仍然是负数(但发生了变化),则不会触发触发器。

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

我需要的似乎是一个事件触发器,以捕获每个更新并使用数据触发器的条件方面播放动画。

当然,我在这里遗漏了一些简单的东西,希望有人能直截了当!

非常感谢

马特

4

0 回答 0