WPF DataGrid - 插入数据网格时突出显示新行

2024-01-29

我有一个绑定到 ObservableCollection 的数据网格,我想做的是在将新行添加到数据网格时(即,当将新对象插入到 ObservableCollection 中时)突出显示新行。我想在插入行时突出显示行,方法是最初更改背景颜色,然后随着时间的推移颜色逐渐恢复正常。我尝试了各种不同的方法来让它工作,但没有一种方法可以正常工作。

方法 1:我有一个在列加载时触发的事件触发器。当元素加载时它确实会触发,但它似乎也在其他旧行上几乎随机触发(当该行是新行时它已经触发过一次的行)。

<DataGridHyperlinkColumn x:Name="OrderID" Binding="{Binding OrderNumber}" Header="Order" SortMemberPath="ciOrderId">
    <DataGridHyperlinkColumn.ElementStyle>                                
        <Style TargetType="TextBlock">
            <Setter Property="Background" Value="Transparent"/>
            <EventSetter Event="Hyperlink.Click" Handler="OrderNumber_Click" />
            <Style.Triggers>
                <EventTrigger RoutedEvent="Loaded">
                    <BeginStoryboard>
                        <Storyboard>
                            <ColorAnimation 
                                            Storyboard.TargetProperty="(TextBlock.Background).(SolidColorBrush.Color)" 
                                            Duration="00:00:03" 
                                            From="Red" To="Transparent" />
                        </Storyboard>                                                
                    </BeginStoryboard>
                </EventTrigger>
            </Style.Triggers>
        </Style>
    </DataGridHyperlinkColumn.ElementStyle>
</DataGridHyperlinkColumn>

方法 2:我在视图模型中创建了一个布尔值,当新项目添加到 ObservableCollection 时,该布尔值设置为 true。然后,我在触发器中检查该值,如果为真,则触发情节提要。但我无法让它正常工作,并且当我运行它时应用程序不断出错。另外,一旦故事板运行,我无法找到将此值设置为 false 的方法(我无法使用故事板的 Completed 事件,因为 DataTrigger 是一种样式)。

<DataTrigger Binding="{Binding isNew}" Value="True">
    <DataTrigger.EnterActions>
        <BeginStoryboard>
            <Storyboard>
                <ColorAnimation
                    Storyboard.TargetProperty="(TextBlock.Background).(SolidColorBrush.Color)" 
                    Duration="00:00:03" 
                    From="Red" To="{x:Null}" FillBehavior="Stop"/>
            </Storyboard>
        </BeginStoryboard>
    </DataTrigger.EnterActions>
</DataTrigger>

方法3:当新项目添加到可观察集合中时,我尝试在视图模型中设置时间戳字段。然后在 XAML 中,我希望能够将该时间戳与当前时间进行比较,如果匹配,那么我将触发该事件。我什至还有另一个包含当前时间并由 INotifyPropertyChanged 自动更新的字段,但我似乎无法找到一种方法来将新行的时间戳与包含当前时间的字段进行比较。

我觉得必须有一个解决方案,但在花了令人沮丧的一天试图解决这个问题之后,我希望有人能够提供一些线索。


在处理另一个问题时,我发现了一些可以帮助我解决这个问题的东西。方法1中的解决方案非常接近,它只是解决看似随机的其他行也在看似随机的时间突出显示的问题。问题是容器回收(此问题的更多信息:WPF 工具包 DataGrid 复选框问题 https://stackoverflow.com/questions/3497617/wpf-toolkit-datagrid-checkbox-issues).

不管怎样,我所要做的就是将以下标签添加到我的数据网格中:

VirtualizingStackPanel.VirtualizationMode="Standard"

然后我使用与方法 1 相同的触发器:

<DataGridHyperlinkColumn x:Name="OrderID" Binding="{Binding OrderNumber}" 
        Header="Order" SortMemberPath="ciOrderId">
    <DataGridHyperlinkColumn.ElementStyle>                                
        <Style TargetType="TextBlock">
            <Setter Property="Background" Value="Transparent"/>
            <EventSetter Event="Hyperlink.Click" Handler="OrderNumber_Click" />
            <Style.Triggers>
                <EventTrigger RoutedEvent="Loaded">
                    <BeginStoryboard>
                        <Storyboard>
                            <ColorAnimation 
                                Storyboard.TargetProperty="(TextBlock.Background).(SolidColorBrush.Color)" 
                                Duration="00:00:03" 
                                From="Red" To="Transparent" />
                        </Storyboard>                                                
                    </BeginStoryboard>
                </EventTrigger>
            </Style.Triggers>
        </Style>
    </DataGridHyperlinkColumn.ElementStyle>
</DataGridHyperlinkColumn>

现在,当新行插入到我的数据网格中时,我可以突出显示它们。很有用!

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

WPF DataGrid - 插入数据网格时突出显示新行 的相关文章

随机推荐

  • 如何使 python urllib2 遵循重定向并保留 post 方法

    我正在使用 urllib2 将数据发布到表单 问题是表单回复了 302 重定向 根据Python HTTPRedirectHandler http docs python org library urllib2 html urllib2 H
  • SQLite.Interop 无法删除干净的文件解决方案

    我正在使用 Nuget 包System Data SQLite在 MVC Web 应用程序中 当我尝试清理解决方案并重建时 似乎存在锁定问题 我收到的错误消息是 Unable to delete file bin x64 SQLite In
  • Terraform:在 EKS/ECS 上部署 Docker Compose 应用程序

    TL DR 我使用开源服务器应用程序在 Docker Compose 上运行 它有一些服务 包括 PostgreSQL DB 和 Redis 如何使用 Terraform 以完整的 IaC 方式最好地将此应用程序部署到 AWS 到目前为止的
  • 如何在没有 EventMessageFile 的情况下读取 Windows 事件日志?

    我有读取 Windows 事件日志的代码 它使用 OpenEventLog ReadEventLog 并获取事件源和事件 ID 然后它在下面查找源 HKEY LOCAL MACHINE SYSTEM CurrentControlSet Se
  • 如何从 NSApplication 事件循环中启动 Go 的 main 函数?

    我正在尝试添加Sparkle https sparkle project org进入我的 Qt Go 的绑定 https github com therecipe qt 应用程序使其可以自动更新 问题 运行最新版本时没有弹出对话框 http
  • Ansible 随机 UUID 生成

    在我的 Ansible 脚本中 我想动态生成 UUID 并稍后使用它们 这是我的方法 shell echo uuidgen with sequence count 5 register uuid list uri url http www
  • PHP sprintf 转义%

    我想要以下输出 即将从您的充值账户中扣除 27 59 欧元的 50 当我做这样的事情时 variablesArray 0 variablesArray 1 27 59 stringWithVariables About to deduct
  • 如何在 QEMU 中模拟 TrustZone?

    我正在尝试在 Qemu 中模拟 TrustZone 功能 我发现两个链接似乎解释了这个过程 第一个参考 http www linaro org blog core dump arm trustzone qemu 未附加支持 TrustZon
  • 关于函数调用堆栈的困惑

    根据维基百科 调用者将返回地址压入堆栈 而被调用者 子例程完成后 从调用中弹出返回地址 堆栈并将控制权转移到该地址 图片来自维基 我不太明白这一点 假设我有一个 C 程序如下 include
  • 将十六进制值的行垂直按列转换为二进制

    我正在处理来自串行设备的数据 该设备以非常有趣的格式输出数据 该设备有一个 256x256 的像素阵列 而每个像素都有一个14 bit值 用移位寄存器读出 为了显示格式 我将对其进行说明 就像每个像素都有一个6 bit value Pixe
  • VBA - 导入带有特殊字符的bas模块

    我已经为 excel 模块 bas frx 和 frm 文件 实现了自动导入 版本控制 因此客户将始终获得最新版本的 VBA 脚本 解决方案是这样的 vba 脚本 在 Workbook Open 上 检查 github 存储库版本号是否相等
  • 如何一起使用 requireJS 和 jQuery?

    我想使用 requireJS 并且我正在使用 jQuery 我不想使用 requireJS 和 jQuery 的组合版本 因为我没有使用最新的 jQuery 版本 使用 requireJS 的最佳方式是什么 这也是我的确切问题 我还必须使用
  • 如何确定 Wix 中是否存在注册表项

    我想确定 Wix 中是否存在注册表项 我无法对该键中的值名称做出任何假设 但至少存在一个 未设置默认值 是否可以在不使用自定义操作的情况下检查密钥是否存在 以及可选地 是否有任何值 看看注册表搜索 使用样本
  • 在 VB.NET 中创建一个新线程

    我正在尝试使用匿名函数创建一个新线程 但我不断收到错误 这是我的代码 New Thread Function Do something here End Function Start 以下是我得到的错误 New 语法错误 结束功能 结束函数
  • iPhone SDK:如何检查用户输入的IP是否有效?

    我的 iPhone 应用程序包含多个对服务器的 http 请求 服务器的IP地址可以由用户输入 这样您就可以将应用程序与您自己的私人服务器结合使用 在发出请求之前 我总是检查输入的 IP 地址是否有效 我这样做 BOOL urlExists
  • Mandrill 发送电子邮件时出现问题:消息未发送:已排队

    我在使用 Mandrill 发送电子邮件时遇到问题 我创建了一个帐户和一个新模板 但是当我尝试发送该模板的测试时 即使我曾经发送过电子邮件 我也会收到以下消息 消息未发送 已排队 我为具有相同 pb 的人修复了此问题 我向 Mandrill
  • 无法停止为静态内容触发 ASP.NET 模块

    我在 ASP NET MVC 应用程序中有一个模块 该模块工作正常 但它会针对包括静态内容在内的每种类型的文件触发 即使我有
  • JavaScript 中的函数顺序

    我的问题是基于一本书中的例子 面向对象的 JavaScript https rads stackoverflow com amzn click com 1847194141 第 81 页 词汇范围 所以 我从这个例子中了解到 functio
  • Android Studio 4.1 中缺少 Logcat

    我最近在我的 Windows 机器上安装了 AS 我尝试在 Logcat 中查看我的日志 但无法找到 激活 Logcat 我尝试按照说明进行操作here https stackoverflow com questions 16817566
  • WPF DataGrid - 插入数据网格时突出显示新行

    我有一个绑定到 ObservableCollection 的数据网格 我想做的是在将新行添加到数据网格时 即 当将新对象插入到 ObservableCollection 中时 突出显示新行 我想在插入行时突出显示行 方法是最初更改背景颜色