XAML动画后,将布尔属性重新设置回布尔属性



我在WPF应用程序中有以下情况:

  • 我已经从插座上推出了一些数据,这些数据可以是新项目或编辑的项目。

  • 当项目更新时,我要眨眼,实际上是使用布尔属性进行的,

  • 我有以下DataTrigger

    <Style TargetType="{x:Type telerik:GridViewCell}" x:Key="Style">
    <Style.Triggers>
        <DataTrigger Binding="{Binding IsChanged}" Value="True">
            <DataTrigger.EnterActions>
                <RemoveStoryboard BeginStoryboardName="Highlight" />
                <BeginStoryboard Name="Highlight">
                    <Storyboard>
                        <ColorAnimation Duration="00:00:03" From="Red" FillBehavior="Stop" Storyboard.TargetProperty="(Control.Background).(SolidColorBrush.Color)" />
                    </Storyboard>
                </BeginStoryboard>
            </DataTrigger.EnterActions>
        </DataTrigger>
    </Style.Triggers>
    

使用CellStyleSelector将以下样式应用于RadgridView的每一行。目前,但我认为这是一个黑客,我有一个接口将值重置为false

 public override Style SelectStyle(object item, DependencyObject container)
 {
       if (item is INotifyUpdate notifyUpdate)
       {
            //First I check if the cell has to blink
            if (notifyUpdate.IsChanged)
            {
                notifyUpdate.IsChanged = false;
            }
           ...
        }

- 我的问题是,我已经执行此hack以将值重置为False,否则将其设置为真,从未恢复。结果,当更新另一排并刷新网格时,我得到了已更新以再次闪烁的行。

有没有办法将false值设置回false?

而不是使用自定义IsChanged属性,您可以为Binding.TargetUpdated事件创建EventTrigger并在此处启动动画。

类似:

<Style.Triggers>
    <EventTrigger RoutedEvent="Binding.TargetUpdated">
        <BeginStoryboard>
            <!-- your animation here -->
        </BeginStoryboard>
    </EventTrigger>
</Style.Triggers>

不要忘记为Binding设置NotifyOnTargetUpdated=True您想观察。

因此,您根本不需要"不必要的" IsChanged属性。仅当Binding更新目标值时,所需的动画就会触发。

最新更新