介绍:
ListView 是 WPF 中用于展示数据集合的核心控件,支持复杂布局、数据模板、交互操作和样式定制。ListBox继承自ItemsControl,而ListView又继承自ListBox,增加了View属性。
属性:
- ItemsSource:指定ListView的数据源。
- View:指定ListView的显示视图,如ListViewType.Details、ListViewType.LargeIcon等。
- GroupStyle:定义分组显示的样式。
- SelectedItem:获取或设置当前选定的项。
- SelectionMode:定义选择模式,如SelectionMode.Single、SelectionMode.Multiple等。
- CanUserReorderItems:确定用户是否可以通过拖放来重新排序列表项。
- CanUserDeleteItems:确定用户是否可以通过右键删除列表项。
使用:
- 简单列表:
<ListView x:Name="listView">
<ListViewItem>123</ListViewItem>
<ListViewItem>123</ListViewItem>
</ListView>
<ListView ItemsSource="{Binding StringList}"/>
- 多列表格:结合 GridView 实现表格布局,支持自定义列宽和排序
<!-- 样式 -->
<Style x:Key="ItemStyle" TargetType="{x:Type ListViewItem}">
<!-- 设置列表项的高度 -->
<Setter Property="Height" Value="60"/>
<!--设置GridViewColumn可以调整位置-->
<Setter Property="HorizontalContentAlignment" Value="Stretch"/>
<Setter Property="BorderThickness" Value="0"/>
<!--取消选中-->
<Style.Triggers>
<Trigger Property="IsSelected" Value="True">
<Setter Property="Background" Value="White"/>
</Trigger>
<Trigger Property="IsMouseOver" Value="True">
<Setter Property="Background" Value="White"/>
</Trigger>
</Style.Triggers>
</Style>
<!-- ListView -->
<ListView x:Name="listView" ItemContainerStyle="{StaticResource ItemStyle}">
<!--设置GridViewColumnHeader-->
<ListView.Resources>
<!-- 定义GridViewColumnHeader的样式 -->
<Style TargetType="{x:Type GridViewColumnHeader}">
<!-- 设置字体大小 -->
<Setter Property="FontSize" Value="16"/>
<!-- 通过设置Padding和Height来调整高度,但通常Height不是直接设置的,而是通过Padding和内部布局来控制 -->
<Setter Property="Padding" Value="5,10,5,10"/>
<!-- 调整上下内边距以影响高度 -->
<!-- 其他样式设置,如背景色、前景色等 -->
<Setter Property="Background" Value="#5ABB25"/>
<Setter Property="Foreground" Value="Black"/>
</Style>
</ListView.Resources>
<ListView.View>
<GridView>
<GridViewColumn Width="100">
<GridViewColumn.Header>
<GridViewColumnHeader Content="序号" IsEnabled="False"/>
</GridViewColumn.Header>
<GridViewColumn.CellTemplate>
<DataTemplate>
<TextBlock HorizontalAlignment="Center" VerticalAlignment="Center" Text="{Binding Id}" FontSize="18"/>
</DataTemplate>
</GridViewColumn.CellTemplate>
</GridViewColumn>
<GridViewColumn Header="名称" DisplayMemberBinding="{Binding Name}"/>
<GridViewColumn Header="年龄" Width="1400">
<GridViewColumn.CellTemplate>
<DataTemplate>
<TextBlock Text="{Binding Age}" FontSize="18"/>
</DataTemplate>
</GridViewColumn.CellTemplate>
</GridViewColumn>
</GridView>
</ListView.View>
</ListView>
- 自定义数据模板:
<ListView ItemsSource="{Binding Items}">
<ListView.ItemTemplate>
<DataTemplate>
<StackPanel Orientation="Horizontal">
<Image Source="{Binding Icon}"/>
<TextBlock Text="{Binding Name}"/>
</StackPanel>
</DataTemplate>
</ListView.ItemTemplate>
</ListView>
- 自定义分组模板:
<ListView.GroupStyle>
<GroupStyle>
<GroupStyle.HeaderTemplate>
<DataTemplate>
<TextBlock Text="{Binding Group.Name}" FontWeight="Bold"/>
</DataTemplate>
</GroupStyle.HeaderTemplate>
</GroupStyle>
</ListView.GroupStyle>
样式示例
<ListView x:Name="listView" ItemContainerStyle="{StaticResource ItemStyle}">
<ListView.View>
<GridView ColumnHeaderContainerStyle="{StaticResource HeaderStyle}">
<GridViewColumn Header="曲目编号" DisplayMemberBinding="{Binding ID}" Width="100"/>
<GridViewColumn Header="类型" DisplayMemberBinding="{Binding STBigTypeTitle}" Width="175"/>
</GridView>
</ListView.View>
</ListView>
- 自定义ItemContainerStyle样式
<Style x:Key="ItemStyle" TargetType="{x:Type ListViewItem}">
<Setter Property="Height" Value="50"/>
<Setter Property="HorizontalContentAlignment" Value="Center"/>
<Setter Property="BorderThickness" Value="0"/>
<Setter Property="FontSize" Value="16"/>
<Style.Triggers>
<Trigger Property="IsSelected" Value="True">
<Setter Property="Background" Value="#FFDDF4E8"/>
</Trigger>
</Style.Triggers>
</Style>
- 自定义ColumnHeaderContainerStyle样式
<Style x:Key="HeaderStyle" TargetType="{x:Type GridViewColumnHeader}">
<Setter Property="IsHitTestVisible" Value="False"/>
<Setter Property="Height" Value="45"/>
<Setter Property="Background" Value="#FFDDF4E8"/>
<Setter Property="FontSize" Value="16"/>
</Style>
- 启用虚拟化:
在 ListView 控件中设置 VirtualizingPanel.IsVirtualizing="True",强制仅渲染可见项