当前位置: 首页 > news >正文

WPF学习笔记(13)列表框控件ListBox与数据模板

列表框控件ListBox与数据模板

  • 一、ListBox
    • 1. ListBox概述
    • 2. ItemsControl类
    • 3. Selector类
    • 4. ListBox类
  • 二、ListBox数据模板


一、ListBox

1. ListBox概述

ListBox代表一个可单选或多选的列表
官方文档:https://learn.microsoft.com/zh-cn/dotnet/api/system.windows.controls.listbox?view=netframework-4.8
在这里插入图片描述

2. ItemsControl类

ItemsControl类是列表ListBox、下拉框ComboBox、菜单、表格等一系列选项的基类,部分属性如下:
|属性|说 明|

左对齐
ltemsSource获取或设置用于生成 ltemsControl 的内容的集合。
设置ltemsSource属性后,集合ltems是只读且固定大小的,因此不可修改。
ltems获取用于生成 ltemsControl 的内容的集合。
DisplayMemberPath获取或设置源对象上的值的路径,以用作对象的可视表示形式,不能同时设置 DisplayMemberPath 和ltemTemplate.
ItemTemplate获取或设置用来显示每个项的数据模板DataTemplate。
ltemContainerStyle获取或设置应用于为每个项生成的容器元素的 Style。

3. Selector类

Selector类允许用户从其元素中选择项的控件。部分属性和事件如下:

属性说 明
SelectedIndex获取或设置当前选择中第一项的索引,如果选择为空返回-1。
Selectedltem获取或设置当前选择中的第一项,如果选择为空返回 null。
SelectedValue获取或设置当前选择中的第一项的某个成员值。
SelectedValuePath通常与 SelectedValue 属性一起使用,用于指定控件中选定项目的属性。
事件说 明
Selected当选择项时发生。
SelectionChanged当选择更改时发生。
UnSelected当取消选择项时发生。

4. ListBox类

ListBox类的部分属性与事件如下:
|属性|说 明 |

左对齐
Selectedltems取当前所有选择的项。
SelectionMode获取或设置 ListBox 的选择行为。
Single 用户一次只能选择一项。
Multiple 用户可选择多个项而无需按下修改键(Shift、Ctr等)。
Extended 用户可在按住 SHIFT 键的同时选择多个连续项目或按住Ctr 键并单击项目来选择非连续项。

在这里插入图片描述
在这里插入图片描述
示例代码1,列表显示字符串:

    <Grid><!--d:仅在设计界面显示--><ListBox x:Name="listBox" d:ItemsSource="{d:SampleData ItemCount=5}" SelectionMode="Multiple"></Grid>
public partial class MainWindow : Window
{public MainWindow(){InitializeComponent();List<String> list = new List<String>();list.Add("高等数学");list.Add("线性代数");list.Add("数率统计");listBox.ItemsSource = list;listBox.SelectionChanged += listBox_SelectionChanged;}private void listBox_SelectionChanged(object sender, SelectionChangedEventArgs e){Console.WriteLine("--------------------");// 遍历所选项并打印// 多选模式下listBox.SelectedItem; listBox.SelectedValue是第一个选择的值foreach (object item in listBox.SelectedItems){Console.WriteLine(item.ToString());}}
}

示例代码2,列表为Stu类的对象:

//创建学生类,包含ID, Name, Score三个属性
public class Stu
{public int Id { get; set; }public string Name { get; set; }public int Score { get; set; }public Stu(int id, string name, int score){Id = id;Name = name;Score = score;}
}
public partial class MainWindow : Window
{public MainWindow(){InitializeComponent();List<Stu> list = new List<Stu>{new Stu(1, "张三", 100),new Stu(2, "李四", 80),new Stu(3, "王五", 75)};listBox.ItemsSource = list;// 显示的字段,列表框界面上显示的是姓名listBox.DisplayMemberPath = "Name";//选择的值的字段,SelectedValue获取的值是分数listBox.SelectedValuePath = "Score";listBox.SelectionChanged += listBox_SelectionChanged;}private void listBox_SelectionChanged(object sender, SelectionChangedEventArgs e){Console.WriteLine("--------------------");// 遍历所选项并打印// 多选模式下listBox.SelectedItem; listBox.SelectedValue是第一个选择的值foreach (object item in listBox.SelectedItems){Stu stu = (Stu)item;Console.WriteLine(stu.Id +","+ stu.Name + "," + stu.Score);}}
}
    <Grid><!--d:ItemsSource="{d:SampleData ItemCount=5}"仅在设计界面显示--><ListBox x:Name="listBox" d:ItemsSource="{d:SampleData ItemCount=5}" SelectionMode="Multiple"Height="300" Width="600"/></Grid>

在这里插入图片描述

二、ListBox数据模板

通过在MainWindow.xaml界面的window.resources 定义数据模板,然后使用ListBox类继承的ItemTemplate属性引用,示例代码如下:

public class Stu
{public int Id { get; set; }public string Name { get; set; }public int Score { get; set; }public Stu(int id, string name, int score){Id = id;Name = name;Score = score;}
}
public partial class MainWindow : Window
{public MainWindow(){InitializeComponent();List<Stu> list = new List<Stu>{new Stu(1, "张三", 100),new Stu(2, "李四", 80),new Stu(3, "王五", 75)};listBox.ItemsSource = list;listBox.SelectionChanged += listBox_SelectionChanged;}private void listBox_SelectionChanged(object sender, SelectionChangedEventArgs e){Console.WriteLine("--------------------");// 遍历所选项并打印// 多选模式下listBox.SelectedItem; listBox.SelectedValue是第一个选择的值foreach (object item in listBox.SelectedItems){Stu stu = (Stu)item;Console.WriteLine(stu.Id +","+ stu.Name + "," + stu.Score);}}
}
    <Window.Resources><DataTemplate x:Key="myDT"><Border BorderBrush="Gray" BorderThickness="2"><StackPanel><TextBlock Text="{Binding Path=Id}" Foreground="Red" /><TextBlock Text="{Binding Path=Name}" Foreground="Green" /><TextBlock Text="{Binding Path=Score}" Foreground="Blue" /></StackPanel></Border></DataTemplate></Window.Resources><Grid><!--d:ItemsSource="{d:SampleData ItemCount=5}"仅在设计界面显示--><ListBox x:Name="listBox" d:ItemsSource="{d:SampleData ItemCount=5}" SelectionMode="Multiple"ItemTemplate="{StaticResource myDT}"Height="300" Width="600"/></Grid>

在这里插入图片描述

http://www.lqws.cn/news/572761.html

相关文章:

  • 开发中bs,cs都是什么意思
  • 视频跳帧播放器设计与实现
  • [Linux] PXE
  • HttpServletRequest
  • OpenCV 4.10.0 移植
  • Spring Cloud:服务监控与追踪的高级实践
  • C++ 第四阶段 STL 容器 - 第一讲:详解 std::vector
  • 5 c++核心——文件操作
  • restful规范
  • Oauth2 自定义设置token过期时间
  • HarmonyOS 公共事件机制介绍以及多进程之间的通信实现(9000字详解)
  • 【网络】:DNS协议、ICMP协议、NAT技术
  • MongoDB06 - MongoDB 地理空间
  • vllm部署私有智谱大模型
  • 疏通经脉: Bridge 联通逻辑层和渲染层
  • 模拟多维物理过程与基于云的数值分析-AI云计算数值分析和代码验证
  • 生物实验室安全、化学品安全
  • 【notes2】并发,IO,内存
  • 30套精品论文答辩开题报告PPT模版
  • Gemini cli Quickstart
  • 数据结构复习4
  • 常用指令合集(DOS/Linux/git/Maven等)
  • debug的计算表达式
  • 《平行宇宙思维如何让前端错误处理无懈可击》
  • 2025年渗透测试面试题总结-2025年HW(护网面试) 20(题目+回答)
  • 各种常用的串口助手工具分享
  • 第10篇 图像语义分割和目标检测介绍
  • 循环神经网络的概念和案例
  • 带读YOLOv13,HyperACE | FullPAD到底是什么
  • 个人计算机系统安全、网络安全、数字加密与认证