WPF之ListView

介绍:

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",强制仅渲染可见项
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容