gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 14:49:51 25 4
gpt4 key购买 nike

我有一个绑定(bind)到 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:我在 View 模型中创建了一个 bool,当新项目添加到 ObservableCollection 时设置为 true。然后我在触发器中检查这个值,如果它是真的,我会触发 Storyboard 。我无法让它正常工作,并且当我运行它时应用程序不断出错。此外,一旦 Storyboard 运行,我无法找到将此值设置为 false 的方法(我不能使用 Storyboard 的 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:当新项目添加到可观察集合时,我尝试在 View 模型中设置时间戳字段。然后在 XAML 中,我希望能够将该时间戳与当前时间进行比较,如果匹配,那么我将触发该事件。我什至还有另一个包含当前时间的字段,并由 INotifyPropertyChanged 自动更新,但我似乎无法找到将新行的时间戳与包含当前时间的字段进行比较的方法。

我觉得必须有一个解决方案,但是在花了令人沮丧的一天试图弄清楚之后,我希望那里的人能够阐明一些观点。

最佳答案

在处理另一个问题时,我发现了一些可以帮助我解决这个问题的方法。方法 1 中的解决方案非常接近,只是解决了看似随机的其他行也在看似随机的时间被突出显示的问题。问题是容器回收(此问题中的更多信息: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>

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

关于triggers - WPF DataGrid - 插入数据网格时突出显示新行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8424994/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com