在WPF中使用ListView的分组功能时,样式左侧有一个很小的边距。
具有分组问题的ListView示例(边距):
没有分组的ListView示例(在分组列表中需要相同样式的项目):
问题:
如何删除边距/填充?分组列表中的(选定)项应填充与未分组列表中相同的空间。
更新
<ListView Margin="20,0,0,0" ItemsSource="{Binding ItemsView}" SelectedItem="{Binding SelectedItem}" IsSynchronizedWithCurrentItem="True" SelectionMode="Single" BorderThickness="0" Background="Transparent">
<ListView.GroupStyle>
<GroupStyle>
<GroupStyle.HeaderTemplate>
<DataTemplate DataType="data:Item">
<DockPanel HorizontalAlignment="Stretch">
<TextBlock Text="{Binding Name}" FontWeight="Bold" Margin="0,5,5,5" />
<Separator />
</DockPanel>
</DataTemplate>
</GroupStyle.HeaderTemplate>
</GroupStyle>
</ListView.GroupStyle>
<ListView.ItemTemplate>
<DataTemplate DataType="data:Item">
<TextBlock Margin="10,10,10,10" Text="{Binding Name}" />
</DataTemplate>
</ListView.ItemTemplate>
</ListView>
答案 0 :(得分:13)
当在CollectionViewSource中使用分组时(我假设您正在使用分组),GroupItem将可视化Group。 GroupItem的默认样式如下所示(使用StyleSnooper获得):
<Style TargetType="{x:Type GroupItem}" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation">
<Setter Property="Control.Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type GroupItem}">
<StackPanel>
<ContentPresenter Content="{TemplateBinding ContentControl.Content}" ContentTemplate="{TemplateBinding ContentControl.ContentTemplate}" ContentStringFormat="{TemplateBinding ContentControl.ContentStringFormat}" />
<ItemsPresenter Margin="5,0,0,0" />
</StackPanel>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
如您所见,ItemsPresenter上有一个保证金。解决方案是为GroupItem创建自己的样式,并删除ItemsPresenter上的Margin,并将GroupStyle.ContainerStyle设置为使用此样式。