当我深入研究 WPF 时,我开始有点困惑,我觉得这个示例将有助于更好地理解事物。我的要求是这样的:我有一个 ListView 使用绑定到普通 .NET 对象的集合,我想做两件事:
1)如果值为某个值,则突出显示 ListView 中一行的单元格 - 我想我可以为此使用 GridViewColumn.CellTemplate 并使用 DataTrigger 创建一个 DataTemplate,但是我在这里变得困惑 - 是 DataType DataTemplate 应该是 ListViewItem 还是应该是底层对象本身的类型?
在 WPF 中,这对我来说是一个普遍的困惑点。不知道何时将其键入到底层集合对象(我在示例中看到)与列表项类型本身。这是我的第一次尝试:
<GridViewColumn Header="Position">
<GridViewColumn.CellTemplate>
<DataTemplate DataType="{x:Type ListViewItem}">
<TextBlock Text="{Binding Path=PositionCode}"></TextBlock>
<DataTemplate.Triggers>
<DataTrigger Binding="{Binding PositionCode}" Value="QB">
<Setter Property="Foreground" Value="Blue" />
</DataTrigger>
<DataTrigger Binding="{Binding PositionCode}" Value="RB">
<Setter Property="Foreground" Value="Green" />
</DataTrigger>
<DataTrigger Binding="{Binding PositionCode}" Value="WR">
<Setter Property="Foreground" Value="Red" />
</DataTrigger>
</DataTemplate.Triggers>
</DataTemplate>
</GridViewColumn.CellTemplate>
</GridViewColumn>
但是,这并不奇怪会导致错误消息
Cannot find the Template Property 'Background' on the type 'System.Windows.Controls.ContentPresenter'
2)类似于 1)我想在另一个标准上有一个类似的规则我想突出显示整行,而不是仅仅基于类似 DataTrigger 属性的单元格,但同时我希望单元格突出显示优先于行突出显示.
我将如何做到这一点以及我需要覆盖什么模板才能做到这一点?我猜它是 ListView.ItemTemplate 但数据类型是什么?