gpt4 book ai didi

c# - 在 CellTemplate 中为 ListView 创建触发器? (一般与模板混淆)

转载 作者:行者123 更新时间:2023-11-30 14:35:30 24 4
gpt4 key购买 nike

随着我深入研究 WPF,我开始有点困惑,我觉得这个示例将有助于更好地理解事物。我的要求是:我有一个 ListView,它使用绑定(bind)到一组普通 .NET 对象,我想做两件事:

1) 如果值是某个值,则在 ListView 中突出显示一行的单元格 - 我想我可以为此使用 GridViewColumn.CellTemplate 并创建一个带有 DataTrigger 的 DataTemplate,但是我在这里变得困惑 - 是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,但数据类型是什么?

最佳答案

试试这个:

<GridViewColumn Header="Position">
<GridViewColumn.CellTemplate>
<DataTemplate DataType="{x:Type ListViewItem}">
<TextBlock Name="TextBlockName" Text="{Binding Path=PositionCode}"></TextBlock>
<DataTemplate.Triggers>
<DataTrigger Binding="{Binding PositionCode}" Value="QB">
<Setter TargetName="TextBlockName" Property="Foreground" Value="Blue" />
</DataTrigger>
<DataTrigger Binding="{Binding PositionCode}" Value="RB">
<Setter TargetName="TextBlockName" Property="Foreground" Value="Green" />
</DataTrigger>
<DataTrigger Binding="{Binding PositionCode}" Value="WR">
<Setter TargetName="TextBlockName" Property="Foreground" Value="Red" />
</DataTrigger>
</DataTemplate.Triggers>
</DataTemplate>
</GridViewColumn.CellTemplate>
</GridViewColumn>

关于c# - 在 CellTemplate 中为 ListView 创建触发器? (一般与模板混淆),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12028977/

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