【问题标题】:Reset a boolean property back after a XAML animation在 XAML 动画之后重置布尔属性
【发布时间】:2017-09-19 22:21:16
【问题描述】:

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

  • 我从套接字推送了一些数据,这些数据可以是新项目,也可以是已编辑的数据。

  • 更新项目时,我必须让行闪烁,这实际上是使用布尔属性 IsChanged 执行的

  • 我有以下 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 的每一行。目前,但我认为它是一个 HACK 我有一个将值重置为 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,否则它将设置为 true 并且永远不会恢复。结果,当更新另一行并刷新网格时,我让已更新的行再次闪烁。

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

【问题讨论】:

    标签: c# wpf xaml


    【解决方案1】:

    您可以为Binding.TargetUpdated 事件创建一个EventTrigger 并在那里开始您的动画,而不是使用自定义的IsChanged 属性。

    类似:

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

    不要忘记将NotifyOnTargetUpdated=True 设置为您要观察的Binding

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

    【讨论】:

    • 对不起,第一次加载时会发生什么,当最初加载所有数据时?
    • 然后你会看到所有的动画。如果您不想这样做,请使用附加属性或BehaviorNotifyOnTargetUpdated 属性初始设置为false
    • 你能给我一个样品吗? NotifyOnTargetUpdated 应该在每个绑定上设置?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-10-13
    • 2018-01-06
    • 1970-01-01
    • 2020-10-17
    • 1970-01-01
    • 2023-03-13
    • 2020-03-22
    相关资源
    最近更新 更多