深入了解WPF控件:常用属性与用法(六)

掌握WPF控件:熟练常用属性(六)

ListView

  • 用于展示数据项集合的列表控件。它提供了丰富的功能和灵活的定制性,可以轻松地展示和编辑大量的数据。
常用属性描述
ItemsSource用于设置ListView的数据源。可以是一个集合、数组或列表等。
ItemTemplate用于设置ListView中每个项目的模板。可以通过DataTemplate定义项目的外观和内容。
ItemContainerStyle用于设置ListView中每个项目容器的样式。可以通过Style定义项目容器的外观和行为。
SelectedItem用于获取或设置当前选中的项目。
SelectionMode用于设置ListView的选择模式。可以是单选、多选或无选择。
GridViewColumn用于设置ListView的列定义。可以通过GridViewColumn定义列的标题、宽度和数据模板。
HeaderContainerStyle用于自定义GridViewColumn列标题容器的外观和行为。比如让所有列的标题靠左
SelectedIndex用于获取或设置当前选中项目的索引。,如果没有选中任何项,则返回-1
SelectedItems用于获取当前选中的多个项目。与SelectedItem的区别就是它可以获取多个选中项目。
ScrollViewer用于设置ListView的滚动视图器。可以用ScrollViewer设置滚动条的样式和行为。
ContextMenu用于设置ListView的上下文菜单。可以用ContextMenu定义项目的右键菜单。
AlternationCount用于指定交替行的数量。当 AlternationCount 设置为大于 1 的值时,ListView 会自动为交替行应用不同的背景色,一般设置为2。
GridViewColumnHeader.Click视图 GrudVuew 列标题头点击事件。
  • 下面写个基础例子
<Grid><!--添加一个基础的ListView  设置HorizontalAlignment 水平居中,设置VerticalAlignment 垂直向上--><!--使用DataTemplate设置ListView中每个项--><!--用ItemContainerStyle设置每个项的背景颜色和字体颜色--><!--设置交替背景颜色 AlternationCount为2表示隔行显示不同颜色--><ListView Name="myListView" HorizontalAlignment="Center"  Margin="10,10,10,0" VerticalAlignment="Top"  AlternationCount ="2"><ListView.ItemContainerStyle><Style TargetType="ListViewItem"><!-- 定义交替行的样式 --><!--用Triggers 触发器,根据不同的条件显示不同的背景颜色和字体颜色--><Style.Triggers><!-- 当 ItemsControl.AlternationIndex 为偶数时应用此样式 --><Trigger Property="ItemsControl.AlternationIndex" Value="0"><Setter Property="Background" Value="LightBlue" /><Setter Property="Foreground" Value="White" /></Trigger><!-- 当 ItemsControl.AlternationIndex 为奇数时应用此样式 --><Trigger Property="ItemsControl.AlternationIndex" Value="1"><Setter Property="Background" Value="White" /></Trigger></Style.Triggers></Style></ListView.ItemContainerStyle><!--视图--><ListView.View><GridView><!--使用 GridViewColumn设置每列的标题--><GridViewColumn Header="ID" Width="120"><!--设置列标题水平靠左,垂直居中--><GridViewColumn.HeaderContainerStyle><Style TargetType="GridViewColumnHeader"><Setter Property="HorizontalAlignment" Value="Left"/><Setter Property="VerticalAlignment" Value="Center"/></Style></GridViewColumn.HeaderContainerStyle><GridViewColumn.CellTemplate><DataTemplate><TextBlock Text="{Binding Id}" /></DataTemplate></GridViewColumn.CellTemplate></GridViewColumn><GridViewColumn Header="姓名" Width="120"><!--设置列标题水平靠左,垂直居中--><GridViewColumn.HeaderContainerStyle><Style TargetType="GridViewColumnHeader"><Setter Property="HorizontalAlignment" Value="Left"/><Setter Property="VerticalAlignment" Value="Center"/></Style></GridViewColumn.HeaderContainerStyle><GridViewColumn.CellTemplate><DataTemplate><TextBlock Text="{Binding Name}" /></DataTemplate></GridViewColumn.CellTemplate></GridViewColumn><GridViewColumn Header="年龄" Width="120"><!--设置列标题水平靠左,垂直居中--><GridViewColumn.HeaderContainerStyle><Style TargetType="GridViewColumnHeader"><Setter Property="HorizontalAlignment" Value="Left"/><Setter Property="VerticalAlignment" Value="Center"/></Style></GridViewColumn.HeaderContainerStyle><GridViewColumn.CellTemplate><DataTemplate><TextBlock Text="{Binding Age}" /></DataTemplate></GridViewColumn.CellTemplate></GridViewColumn></GridView></ListView.View></ListView>
</Grid>
using System.Windows;namespace WpfCommonControls
{/// <summary>/// ListView.xaml 的交互逻辑/// </summary>public partial class ListView : Window{private static Random random = new Random();public ListView(){InitializeComponent();this.LoadData();}private void LoadData(){List<PersonModel> list = new List<PersonModel>{new PersonModel { Id=random.Next(1, 10001), Name = "张三", Age = random.Next(18, 61) },new PersonModel {Id=random.Next(1, 10001), Name = "李四", Age = random.Next(18, 61) },new PersonModel {Id=random.Next(1, 10001), Name = "王二", Age = random.Next(18, 61) },new PersonModel {Id=random.Next(1, 10001), Name = "麻子", Age = random.Next(18, 61) }};// 绑定ListView数据源myListView.ItemsSource = list;}public class PersonModel{/// <summary>/// ID/// </summary>public int Id { get; set; }/// <summary>/// 姓名/// </summary>public string? Name { get; set; }/// <summary>/// 年龄/// </summary>public int Age { get; set; }}}
}

ListView

ListView点击列进行列排序

  • 使用GridViewColumnHeader.Click 点击事件来对列进行排序
  • 下面来写个例子
<Grid><!--添加一个基础的ListView  设置HorizontalAlignment 水平居中,设置VerticalAlignment 垂直向上--><!--使用DataTemplate设置ListView中每个项--><!--用ItemContainerStyle设置每个项的背景颜色和字体颜色--><!--设置交替背景颜色 AlternationCount为2表示隔行显示不同颜色--><!--增加GridViewColumnHeader.Click 点击事件来对列进行排序--><ListView Name="myListView" HorizontalAlignment="Center"  Margin="10,10,10,0" VerticalAlignment="Top"  AlternationCount ="2"  GridViewColumnHeader.Click="myListView_Click" ><ListView.ItemContainerStyle><Style TargetType="ListViewItem"><!-- 定义交替行的样式 --><!--用Triggers 触发器,根据不同的条件显示不同的背景颜色和字体颜色--><Style.Triggers><!-- 当 ItemsControl.AlternationIndex 为偶数时应用此样式 --><Trigger Property="ItemsControl.AlternationIndex" Value="0"><Setter Property="Background" Value="LightBlue" /><Setter Property="Foreground" Value="White" /></Trigger><!-- 当 ItemsControl.AlternationIndex 为奇数时应用此样式 --><Trigger Property="ItemsControl.AlternationIndex" Value="1"><Setter Property="Background" Value="White" /></Trigger></Style.Triggers></Style></ListView.ItemContainerStyle><!--视图--><ListView.View><GridView><!--使用 GridViewColumn设置每列的标题--><GridViewColumn Header="ID" Width="120"  DisplayMemberBinding="{Binding Id}"><!--设置列标题水平靠左,垂直居中--><GridViewColumn.HeaderContainerStyle><Style TargetType="GridViewColumnHeader"><Setter Property="HorizontalAlignment" Value="Left"/><!--<Setter Property="VerticalAlignment" Value="Center"/>--></Style></GridViewColumn.HeaderContainerStyle></GridViewColumn><GridViewColumn Header="姓名" Width="120"  DisplayMemberBinding="{Binding Name}"><!--设置列标题水平靠左,垂直居中--><GridViewColumn.HeaderContainerStyle><Style TargetType="GridViewColumnHeader"><Setter Property="HorizontalAlignment" Value="Left"/><Setter Property="VerticalAlignment" Value="Center"/></Style></GridViewColumn.HeaderContainerStyle></GridViewColumn><GridViewColumn Header="年龄" Width="120" DisplayMemberBinding="{Binding Age}"><!--设置列标题水平靠左,垂直居中--><GridViewColumn.HeaderContainerStyle><Style TargetType="GridViewColumnHeader"><Setter Property="HorizontalAlignment" Value="Left"/><Setter Property="VerticalAlignment" Value="Center"/></Style></GridViewColumn.HeaderContainerStyle></GridViewColumn></GridView></ListView.View></ListView>
</Grid>
using System.ComponentModel;
using System.Globalization;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;namespace WpfCommonControls
{/// <summary>/// ListView.xaml 的交互逻辑/// </summary>public partial class ListView : Window{private static Random random = new Random();public ListView(){InitializeComponent();this.LoadData();}private void LoadData(){List<PersonModel> list = new List<PersonModel>{new PersonModel { Id=random.Next(1, 10001), Name = "张三", Age = random.Next(18, 61) },new PersonModel {Id=random.Next(1, 10001), Name = "李四", Age = random.Next(18, 61) },new PersonModel {Id=random.Next(1, 10001), Name = "王二", Age = random.Next(18, 61) },new PersonModel {Id=random.Next(1, 10001), Name = "麻子", Age = random.Next(18, 61) }};// 绑定ListView数据源myListView.ItemsSource = list;}public class PersonModel{/// <summary>/// ID/// </summary>public int Id { get; set; }/// <summary>/// 姓名/// </summary>public string? Name { get; set; }/// <summary>/// 年龄/// </summary>public int Age { get; set; }}GridViewColumnHeader? lastHeaderClicked = null; // 最后一次点击的头private void myListView_Click(object sender, RoutedEventArgs e){var headerClicked = e.OriginalSource as GridViewColumnHeader;ListSortDirection direction;if (headerClicked != null){if (headerClicked.Role != GridViewColumnHeaderRole.Padding){if (headerClicked.Tag == null){// 初始排序方向为升序  direction = ListSortDirection.Ascending;}else{// 切换排序方向  if ((ListSortDirection)headerClicked.Tag == ListSortDirection.Ascending){direction = ListSortDirection.Descending;}else{direction = ListSortDirection.Ascending;}}// 获取列绑定属性名  var columnBinding = headerClicked.Column.DisplayMemberBinding as Binding;var sortBy = columnBinding?.Path.Path ?? headerClicked.Column.Header as string;// 获取数据视图并进行排序  ICollectionView dataView = CollectionViewSource.GetDefaultView(myListView.ItemsSource);dataView.SortDescriptions.Clear();SortDescription sd = new SortDescription(sortBy, direction);dataView.SortDescriptions.Add(sd);dataView.Refresh();// 更新列头的显示以反映排序方向  if (direction == ListSortDirection.Ascending){headerClicked.Content = headerClicked.Column.Header + " ↑";}else{headerClicked.Content = headerClicked.Column.Header + " ↓";}// 存储排序方向以便下次点击时切换  headerClicked.Tag = direction;// 移除其他列头以移除排序指示器  if (lastHeaderClicked != null && lastHeaderClicked != headerClicked){lastHeaderClicked.Content = (lastHeaderClicked.Column.Header as string)?.Replace("↑", "").Replace("↓", "");}// 赋值最后一次头点击lastHeaderClicked = headerClicked;}}}}
}

ListView排序

公众号“点滴分享技术猿

关注

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/640313.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

透明拼接屏代工:专业制造与质量保证

透明拼接屏代工是指专业的代工厂家根据客户的需求&#xff0c;为其生产透明拼接屏产品。随着透明拼接屏市场的不断扩大&#xff0c;越来越多的企业选择通过代工方式快速进入市场。尼伽小编将深入探讨透明拼接屏代工的优势、选择合适的代工厂家以及质量保证等方面的内容。 一、透…

深度学习记录--指数加权平均

指数加权移动平均(exponentially weighted moving averages) 如何对杂乱的数据进行拟合&#xff1f; 通过指数加权平均可以把数据图近似拟合成一条曲线 公式&#xff1a; 其中表示第t个平均数&#xff0c;表示第t-1个平均数&#xff0c;表示第t个数据&#xff0c;表示变化参数…

【测试入门】测试用例经典设计方法 —— 因果图法

01、因果图设计测试用例的步骤 1、分析需求 阅读需求文档&#xff0c;如果User Case很复杂&#xff0c;尽量将它分解成若干个简单的部分。这样做的好处是&#xff0c;不必在一次处理过程中考虑所有的原因。没有固定的流程说明究竟分解到何种程度才算简单&#xff0c;需要测试…

IP2325 5V输入双节串联锂电池升压充电IC 英集芯参数

简介 IP2325是一款支持双节串联锂电池/锂离子电 池的升压充电管理IC。 IP2325集成功率MOS&#xff0c;采用同步开关架构&#xff0c; 使其在应用时仅需极少的外围器件&#xff0c;并有效减小整 体方案的尺寸&#xff0c;降低BOM成本。 IP2325的升压开关充电转换器工作频率500K…

免费的WordPress插件大全

在当今数字化的时代&#xff0c;拥有一个强大的在线存在变得至关重要。而对于使用WordPress建站的用户来说&#xff0c;插件是提高网站功能的关键。在这篇文章中&#xff0c;我们将为您推荐三款免费的WordPress插件&#xff0c;它们不仅是147SEO软件中的佼佼者&#xff0c;而且…

《WebKit 技术内幕》学习之五(3): HTML解释器和DOM 模型

3 DOM的事件机制 基于 WebKit 的浏览器事件处理过程&#xff1a;首先检测事件发生处的元素有无监听者&#xff0c;如果网页的相关节点注册了事件的监听者则浏览器会将事件派发给 WebKit 内核来处理。另外浏览器可能也需要处理这样的事件&#xff08;浏览器对于有些事件必须响应…

makefile 编译动态链接库使用(.so库文件)

makefile 编译动态链接库使用&#xff08;.so库文件&#xff09; 动态链接库:不会把代码编译到二进制文件中&#xff0c;而是在运行时才去加载&#xff0c; 好处是程序可以和库文件分离&#xff0c;可以分别发版&#xff0c;然后库文件可以被多处共享 动态链接库 动态&#…

vue3项目eslint配置、配置prettier(格式化配置)

文章链接: 全部配置链接 第一步:eslint配置、配置prettier(代码格式化):点击链接 (1) .eslint.cjs—eslint配置文件 (2).eslintignore—校验忽略文件 (3).prettierrc.json添加规则 (4).prettierignore忽略文件 prettierrc规范说明: npm install -D eslint-plugin-import…

gdip-yolo项目解读:gdip模块 |mdgip模块 |GDIP regularizer模块的使用分析

gdip-yolo是2022年提出了一个端到端的图像自适应目标检测框架&#xff0c;其论文中的效果展示了良好的图像增强效果。其提出了gdip模块 |mdgip模块 |GDIP regularizer模块等模块&#xff0c;并表明这是效果提升的关键。为此对gdip-yolo的项目进行深入分析。 gdip-yolo的论文可以…

第15届蓝桥杯嵌入式省赛准备第三天总结笔记(使用STM32cubeMX创建hal库工程+串口接收发送)

因为我是自己搞得板子&#xff0c;原本的下程序和串口1有问题&#xff0c;所以我用的是串口2&#xff0c;用的PA2和PA3 一&#xff0c;使用CubeMX配置串口 选择A开头的这个是异步通信。 配置串口参数&#xff0c;往届的题基本用的9600波特率&#xff0c;所以我这里设置为9600…

C++——结构体

1&#xff0c;结构体基本概念 结构体属于用户自定义的数据类型&#xff0c;允许用户存储不同的数据类型。像int&#xff08;整型&#xff09;&#xff0c;浮点型&#xff0c;bool型&#xff0c;字符串型等都是属于系统内置的数据类型。而今天要学习的结构体则是属于我们自定义…

导出 MySQL 数据库表结构、数据字典word设计文档

一、第一种 &#xff1a;利用sql语句查询 需要说明的是该方法应该适用很多工具&#xff0c;博主用的是navicat SELECT TABLE_NAME 表名,( i : i 1 ) AS 序号,COLUMN_NAME 列名, COLUMN_TYPE 数据类型, DATA_TYPE 字段类型, CHARACTER_MAXIMUM_LENGTH 长度, IS_NULLABLE…

Linux: dev: glibc: 里面有很多的关于系统调用的函数

其实都没有实体源代码klogctl.c&#xff0c;而是通过编译时构造出来的源代码实体&#xff0c;比如klogctl这个函数&#xff0c;glibc的反汇编如下&#xff1a; 直接是0x67这个系统调用&#xff1a;103&#xff1a; Reading symbols from /usr/lib64/libc-2.28.so... (No debugg…

【C++】入门(一)

前言&#xff1a; 本篇博客将带大家认识C&#xff0c;熟悉基本语法 文章目录 认识CC的诞生与发展C 在行业中的运用 一、命名空间1.1 命名空间的定义1.2 命名空间的使用1.3 命名空间的访问 二、C输入&输出输出操作符 <<输入操作符 >>换行符和刷新输出缓冲区关键…

跟着我学Python进阶篇:03. 面向对象(下)

往期文章 跟着我学Python基础篇&#xff1a;01.初露端倪 跟着我学Python基础篇&#xff1a;02.数字与字符串编程 跟着我学Python基础篇&#xff1a;03.选择结构 跟着我学Python基础篇&#xff1a;04.循环 跟着我学Python基础篇&#xff1a;05.函数 跟着我学Python基础篇&#…

java实现将集合数据导入excel表格之竖向

这里使用的是apache.poi&#xff0c;当然如果使用easyExcel也可以实现 括号是EasyExcel官网&#xff08;EasyExcel官方文档 - 基于Java的Excel处理工具 | Easy Excel&#xff09; 找到填充&#xff0c;都会有相对应的demo实列 下面是我写的apache.poi实现代码 public static vo…

初学python系列: pandas操作excel

媳妇工作中经常用到excel处理&#xff0c;想用python处理excel更高效&#xff0c;所以自学了python&#xff0c;觉得python比Java还是简单多了&#xff0c;没有变量类型声明&#xff0c;比Java也就多了元组&#xff0c;各种库很丰富。 需求是&#xff1a; 汇总两个excel中 列&…

2024年 复习 HTML5+CSS3+移动web 笔记 之CSS遍

28-第三天课程介绍_哔哩哔哩_bilibili CSS 第一天 1.1 引入方式 1.2 选择器 1.3 画盒子 div 独占一行 1.4 文字控制 div 外层 1.5 调试工具 F12 1.5 综合案例 一 新闻详情 1.6 综合案例 二 CSS 简介 CSS 第二天 2.1 复合选择器 2.2 伪类选择器 2.3 CSS 特性 2.4 Emmet 写法 2.5…

JavaEE 网络原理

JavaEE 网络原理 文章目录 JavaEE 网络原理1. 网络互连1.1 局域网LAN1.2 广域网WAN 2. 网络通信基础2.1 IP地址2.2 端口号 3. 网络协议3.1 概念3.2 五元组3.3 协议分层3.4 TCP/IP 五层模型3.5 封装和分用 1. 网络互连 随着时代的发展&#xff0c;需要多个计算机协同工作来完成…

Pix2Pix理论与实战

本文为&#x1f517;365天深度学习训练营 中的学习记录博客 原作者&#xff1a;K同学啊|接辅导、项目定制 我的环境&#xff1a; 1.语言&#xff1a;python3.7 2.编译器&#xff1a;pycharm 3.深度学习框架Pytorch 1.8.0cu111 一、引入 在之前的学习中&#xff0c;我们知道…