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

news2024/12/23 18:35:10

掌握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.coloradmin.cn/o/1403398.html

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

相关文章

架构师考试相关信息

文章目录 去年考试安排官网通知&#xff1a; 中国计算机技术职业资格网&#xff08;今年的安排估计2月份放出&#xff0c;结果大约12月&#xff09; 1&#xff0e;系统架构的考试要求&#xff1a; &#xff08;1&#xff09;掌握计算机硬软件与网络的基础知识&#xff1b; &…

模板方法模式介绍

目录 一、模板方法模式介绍 1.1 模板方法模式的定义 1.2 模板方法模式的原理 1.2.1 模板方法模式类图 1.2.2 类图角色说明 1.2.3 示例代码 二、模板方法模式的应用 2.1 需求说明 2.2 需求实现 2.2.1 账户抽象类 2.2.2 借款一个月 2.2.3 借款7天 2.2.4 测试类 三、…

helm---自动化一键部署

什么是helm?? 在没有这个helm之前&#xff0c;deployment service ingress helm的作用就是通过打包的方式&#xff0c;把deployment service ingress 这些打包在一块&#xff0c;一键式部署服务&#xff0c;类似于yum 官方提供的一个类似于安装仓库的功能&#xff0c;可以实…

Unity学习之坦克游戏制作(1)开始场景的制作

文章目录 1. 实现效果2. 场景装饰2.1 创建场景2.2 拖入场景地板 3 开始界面3.1 导入UI3.2 创建面板基类3.2.1 开始按钮 4 设置界面5 音效数据逻辑5.1 音效数据可持久化5.2 声明音效管理的主要变量5.3 声明数据管理器5.4 在设置面板的数据初始化5.5 提供API给外部 6 排行榜界面6…

​WordPress顶部管理工具栏怎么添加一二级自定义菜单?

默认情况下&#xff0c;WordPress前端和后台页面顶部都有一个“管理工具栏”&#xff0c;左侧一般就是站点名称、评论、新建&#xff0c;右侧就是您好&#xff0c;用户名称和头像。那么我们是否可以在这个管理工具栏中添加一些一二级自定义菜单呢&#xff1f; 其实&#xff0c…

JavaScript库jquery的使用方法

"写更少&#xff0c;做更多"是jquery的设计理念&#xff0c;jquery是一个兼容多浏览器的JavaScript库&#xff0c;利用jquery的语法设计能使开发更便捷。 网页添加jquery的方法:1.从jquery.com下载库&#xff1b;2.从CDN中载入库&#xff08;示例使用&#xff09;&a…

线性代数:矩阵运算(加减、数乘、乘法、幂、除、转置)

目录 加减 数乘 矩阵与矩阵相乘 矩阵的幂 矩阵转置 方阵的行列式 方阵的行列式&#xff0c;证明&#xff1a;|AB| |A| |B| 加减 数乘 矩阵与矩阵相乘 矩阵的幂 矩阵转置 方阵的行列式 方阵的行列式&#xff0c;证明&#xff1a;|AB| |A| |B|

项目管理中如何有效沟通?项目管理有效沟通指南

无论是少数人的小型企业还是拥有数十名员工的大公司&#xff0c;有效的沟通对于确保每个人都参与并准备好在项目中实现相同的目标至关重要。 然而&#xff0c;由于沟通不畅&#xff0c;似乎在翻译中总是丢失一些东西。事实上&#xff0c;根据布兰迪斯大学的一项研究&#xff0c…

k8s集群加入一个master2--kubeadm方式

已经有一个集群&#xff1a; 192.168.206.138 master 192.168.206.136 k8s-node1 192.168.206.137 k8s-node2 kubectl get nodes -o wide 新加入一个master2节点 192.168.206.139 master2 一、初始化系统参数 139 master2 上 #在136、137、138上添加hosts“” echo "…

MSG3D

论文在stgcn与sta-lstm基础上做的。下面讲一下里面的方法&#xff1a; 1.准备工作 符号。这里是对符号进行解释。 一个人体骨骼图被记为G(v,E) 图卷积&#xff1a; 图卷积定义 考虑一种常用于处理图像的标准卷积神经网络 (CNN)。输入是像素网格。每个像素都有一个数据值向…

protobuf 之诡异的文件流与压缩

只接上干货&#xff0c;内容较干。文章大概需要花费5分钟简单了解下。 1、Gzip 直接看源码头文件如上图。压缩对象 GzipOutputStream &#xff0c;通过函数操作可以看到整个文件流是比较完整并清晰。 因为它显示清晰包含了 从初始化 到 flush 到 close 的显示调用 2、Ostream…

同样是IT行业,测试和开发薪资真就差这么大吗?

&#x1f525; 交流讨论&#xff1a;欢迎加入我们一起学习&#xff01; &#x1f525; 资源分享&#xff1a;耗时200小时精选的「软件测试」资料包 &#x1f525; 教程推荐&#xff1a;火遍全网的《软件测试》教程 &#x1f4e2;欢迎点赞 &#x1f44d; 收藏 ⭐留言 &#x1…

ESP32-TCP服务端(Arduino)

将ESP32设置为TCP服务器 介绍 TCP&#xff08;Transmission Control Protocol&#xff09;传输控制协议&#xff0c;是一种面向连接的&#xff08;一个客户端对应一个服务端&#xff09;、可靠的传输层协议。在TCP的工作原理中&#xff0c;它会将消息或文件分解为更小的片段&a…

c++:string相关的oj题(把字符串转换成整数、344.反转字符串、387. 字符串中的第一个唯一字符、917. 仅仅反转字母)

文章目录 1.把字符串转换成整数题目详情代码思路 2. 344.反转字符串题目详情代码1思路1代码2思路 3. 387. 字符串中的第一个唯一字符题目详情代码思路 4. 917. 仅仅反转字母题目详情代码思路 1.把字符串转换成整数 传送门 题目详情 代码 class Solution { public:int StrToI…

DDOD(Disentangle Your Dense Object Detector)解析

paper&#xff1a;Disentangle Your Dense Object Detector official implementation&#xff1a;https://github.com/zehuichen123/DDOD third-party implementation&#xff1a;https://github.com/open-mmlab/mmdetection/tree/main/configs/ddod 存在的问题 现有的目标…

Docker命令---搜索镜像

介绍 使用docker命令搜索镜像。 命令 docker search 镜像命令:版本号示例 以搜索ElasticSearch镜像为例 docker search ElasticSearch

华而有实,维乐Prevail Glide带你领略风景线,成为风景线~

大家都知道呢&#xff01;骑行&#xff0c;不仅是一种运动&#xff0c;更是一种生活态度。在骑行装备的世界里&#xff0c;一个好的坐垫对于骑行的舒适度和安全性至关重要。那今天&#xff0c;我要为大家推荐一款备受赞誉的坐垫——维乐坐垫美学系列-Prevail Glide。    为…

学习笔记——克里金插值

有一篇大神的文章写得非常的具体&#xff0c; https://xg1990.com/blog/archives/222 下面写下一些学习笔记&#xff1a; 1、关于克里金插值的基本原理 克里金插值来源于地理学&#xff0c;它的前提是地理学第一定律&#xff1a;所有事物都与其他事务相关&#xff0c;但是近…

Linux性能监控命令-top

简介 top 命令用于实时监视系统的性能和进程信息。它提供了一个动态的、交互式的界面&#xff0c;列出了当前运行的进程&#xff0c;并显示了它们的 CPU 和内存使用情况。通过该命令可以对硬件性能瓶颈做出基本判断。 1. 语法 top top [参数] top 有 2 种指定参数方式&#xff…

Python 生成 图片网页列表 显示路径和建立时间 笔记

Python 一键 生成 图片网页列表 显示路径和建立时间 &#xff08;方便查看复制路径、重复一键生成&#xff09; 支持格式&#xff1a;jpg \png\ svg\ webp 图片网页列表 图示&#xff1a; 参考代码&#xff1a; # -*- coding: utf-8 -*- import os import datetime# 指定图片…