我有一个绑定到 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(使用前将#替换为@)