我正在创建一个聊天窗口,当新的日期出现在作为datagrid的项目源绑定的列表的特定列中时,我想添加一个水平分隔符。有可能吗?。如果是这样的话? 任何帮助将不胜感激。
这是我想要做的:
答案 0 :(得分:1)
刚检查过,是的,你可以选择分组:
a)向表示消息的对象添加新属性。此属性将返回一个字符串值,具体取决于日期(类似DayOfWeek.ToString();
)
b)将您的收藏分组为此新属性(使用<CollectionViewSource>
)
c)为一个组设置一个样式,大致是这样的(你需要添加一个画布或带有一条线的东西,并且可能将DockPanel的宽度绑定到它的父宽度):
<DataGrid.GroupStyle>
<GroupStyle>
<GroupStyle.ContainerStyle>
<Style TargetType="{x:Type GroupItem}">
<Setter Property="Margin" Value="0,0,0,5"/>
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type GroupItem}">
<StackPanel>
<DockPanel LastChildFill="True">
<TextBlock Text="{Binding Path=Name}" DockPanel.Dock="Right"/>
<!-- here comes the line -->
</DockPanel>
<ListBox>
<ListBox.Items>
<ItemsPresenter />
</ListBox.Items>
</ListBox>
</StackPanel>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
</GroupStyle.ContainerStyle>
</GroupStyle>
</DataGrid.GroupStyle>
P.S。如果您想使用相同的模式对超过一周的邮件进行分组,那么它当然不会起作用。在这种情况下,您可以尝试按两个属性进行分组。我会把所有东西都放在“旧”中。