我有一组数据,我想以这种方式通过WPF ListView呈现:
Column1 Column2 Column3 --GroupName1-- Item1 part2 part3 Item2 part2 part3 --GroupName2-- Item3 part2 part3 Item4 long_text_in_both_columns Item5 part2 part3 --GroupName1-- Item6 part2 part3 Item7 long_text_in_both_columns --GroupName3-- Item8 part2 part3
我想为这些组着色,使每个组名都有一个相关的颜色。请注意,在上面的列表中,有两个“GroupName1”实例,两者都应该是相同的颜色。我开始使用这个基本样本:http://msdn.microsoft.com/en-us/library/ms771309(VS.90).aspx
具体地:
- 我如何拥有两个名称相同的组,但不同的项目? (可能是隐藏的“群组ID”与显示的“群组名称”不同?)
- 我如何按名称为每个组设置样式?
(请注意,所有项目始终按顺序显示,除了组以外的选项也可以。)
答案 0 :(得分:2)
以下是我最终解决这个问题的方法:
正如我最初想的那样,给每个项目GroupID和GroupName都很好。 ID仍然是唯一的,但这些组显示为:
<ListView.GroupStyle>
<GroupStyle>
<GroupStyle.ContainerStyle>
<Style TargetType="{x:Type GroupItem}">
<Setter Property="Margin" Value="1,1,1,10"/>
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type GroupItem}">
<Grid>
<Rectangle Grid.ColumnSpan="4" Margin="0,0,0,0" Fill="{Binding Path=Items[0].GroupBackground}" Stroke="#FF808080" RadiusX="6" RadiusY="6" />
<Expander IsExpanded="True">
<Expander.Header>
<DockPanel>
<TextBlock FontSize="14" Text="{Binding Path=Items[0].GroupName}" Margin="5,0,0,0" HorizontalAlignment="Stretch"/>
</DockPanel>
</Expander.Header>
<Expander.Content>
<ItemsPresenter />
</Expander.Content>
</Expander>
</Grid>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
</GroupStyle.ContainerStyle>
</GroupStyle>
</ListView.GroupStyle>
我发现我真正需要在小组上做的唯一造型是整体背景色。我在项目上创建了另一个属性以供组使用。我用以下方式访问它:
Fill="{Binding Path=Items[0].GroupBackground}"
也许不是最好的方法(大量重复GroupName和GroupBackground数据),但它对我有用。
答案 1 :(得分:0)
你的问题很模糊,但我会尽力回答。
您是如何确定每组中的项目首先属于那里的?在“组1”的示例中,如果您决定按定义的组描述对项目进行分组(您的示例使用“GroupName”),它们将始终位于同一组中
可以通过以下方式定义分组样式。
<Style TargetType="{x:Type GroupItem}" >
<Setter Property="Template" >
<Setter.Value>
<ControlTemplate TargetType="{x:Type GroupItem}" >
<GroupBox Header="{Binding Name}" />
// define style here...
</GroupBox >
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
// ...
<ListView.GroupStyle>
<GroupStyle />
</ListView.GroupStyle>
// ...
答案 2 :(得分:0)
在collectionviewgroup的Name属性上使用DataTrigger,它是groupitem的datacontext