C# WPF入门学习主线篇(八)—— ListBox常见属性和事件

C# WPF入门学习主线篇(八)—— ListBox常见属性和事件

欢迎来到C# WPF入门学习系列的第八篇。在前面的文章中,我们已经探讨了WPF中的ButtonTextBoxLabel控件的使用。今天,我们将深入了解WPF中的另一个常用控件——ListBox。本文将详细介绍ListBox的所有常见属性和事件,并通过示例代码展示如何在实际应用中使用这些功能。

一、ListBox的基础知识

ListBox 是WPF中的一个控件,用于显示一个可以选择的项目列表。用户可以从列表中选择一个或多个项目。

ListBox的基本定义

我们先来看看一个简单的 ListBox 定义:

<Window x:Class="WpfApp.MainWindow"xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"Title="MainWindow" Height="350" Width="525"><Grid><ListBox x:Name="myListBox" HorizontalAlignment="Left" VerticalAlignment="Top" Width="200" Height="300"><ListBoxItem Content="Item 1" /><ListBoxItem Content="Item 2" /><ListBoxItem Content="Item 3" /></ListBox></Grid>
</Window>

在这个示例中,我们定义了一个 ListBox 控件,并添加了三个 ListBoxItem 项目。如果列表数目超过ListBox的高度时会自动出现滚动条。
数目过多自动出现滚动条

二、ListBox的常见属性

1. ItemsSource

ItemsSource 属性用于绑定 ListBox 的数据源。可以是数组、列表或任何实现了 IEnumerable 接口的集合。

<ListBox x:Name="myListBox" HorizontalAlignment="Left" VerticalAlignment="Top" Width="200" Height="300"/>
public partial class MainWindow : Window
{public MainWindow(){InitializeComponent();myListBox.ItemsSource = new List<string> { "Item 1", "Item 2", "Item 3" };}
}

2. SelectedItem

SelectedItem 属性用于获取或设置当前选定的项目。

string selectedItem = myListBox.SelectedItem as string;

3. SelectedIndex

SelectedIndex 属性用于获取或设置当前选定项目的索引。

int selectedIndex = myListBox.SelectedIndex;

4. SelectionMode

SelectionMode 属性用于设置选择模式。可以是 SingleMultipleExtended

<ListBox x:Name="myListBox" SelectionMode="Multiple" />

像这样可以做成选中列表中的某一项然后打印对应的值
在这里插入图片描述
代码如下:

<ListBox x:Name="myListBox"SelectionChanged="MyListBox_SelectionChanged"SelectionMode="Single" HorizontalAlignment="Left" VerticalAlignment="Top" Width="302" Height="200" Margin="690,10,0,0"><ListBoxItem Content="Item 1" /><ListBoxItem Content="Item 2" /><ListBoxItem Content="Item 3" />
</ListBox>
// 见第三章第一节的SelectionChanged事件
private void MyListBox_SelectionChanged(object sender, SelectionChangedEventArgs e){ListBox listBox = sender as ListBox;var selectedItem = listBox.SelectedItem; // 获取选中的项Console.WriteLine($"Selected Item: {selectedItem}");}

5. DisplayMemberPath

DisplayMemberPath 属性用于设置显示成员路径,当数据源为对象集合时,指定显示对象的哪个属性。

<ListBox x:Name="myListBox" DisplayMemberPath="Name" />

示例

下面是一个包含以上常见属性的完整示例:

<ListBox x:Name="myListBox" HorizontalAlignment="Left" VerticalAlignment="Top" Width="200" Height="300"ItemsSource="{Binding Items}" DisplayMemberPath="Name" SelectionMode="Extended"/>
public partial class MainWindow : Window
{public MainWindow(){InitializeComponent();this.DataContext = this;Items = new List<Item>{new Item { Name = "Item 1" },new Item { Name = "Item 2" },new Item { Name = "Item 3" }};}public List<Item> Items { get; set; }
}public class Item
{public string Name { get; set; }
}

三、ListBox的常见事件

1. SelectionChanged

SelectionChanged 事件在选择的项目发生更改时触发。

XAML代码
<ListBox x:Name="myListBox" SelectionChanged="MyListBox_SelectionChanged"/>
后台代码
private void MyListBox_SelectionChanged(object sender, SelectionChangedEventArgs e)
{ListBox listBox = sender as ListBox;string selectedItem = listBox.SelectedItem as string;MessageBox.Show($"Selected Item: {selectedItem}");
}

2. Loaded

Loaded 事件在控件加载完成时触发。

XAML代码
<ListBox x:Name="myListBox" Loaded="MyListBox_Loaded"/>
后台代码
private void MyListBox_Loaded(object sender, RoutedEventArgs e)
{MessageBox.Show("ListBox Loaded");
}

3. MouseDoubleClick

MouseDoubleClick 事件在控件上检测到双击鼠标按钮时触发。

XAML代码
<ListBox x:Name="myListBox" MouseDoubleClick="MyListBox_MouseDoubleClick"/>
后台代码
private void MyListBox_MouseDoubleClick(object sender, MouseButtonEventArgs e)
{ListBox listBox = sender as ListBox;string selectedItem = listBox.SelectedItem as string;MessageBox.Show($"Double-clicked on: {selectedItem}");
}

四、ListBox的高级用法

1. 自定义项模板

通过自定义项模板,可以对 ListBox 中的项目进行更复杂的显示和布局。

XAML代码
<ListBox x:Name="myListBox" HorizontalAlignment="Left" VerticalAlignment="Top" Width="300" Height="300"><ListBox.ItemTemplate><DataTemplate><StackPanel Orientation="Horizontal"><TextBlock Text="{Binding Name}" Width="100"/><TextBlock Text="{Binding Description}" Width="200"/></StackPanel></DataTemplate></ListBox.ItemTemplate>
</ListBox>
后台代码
public partial class MainWindow : Window
{public MainWindow(){InitializeComponent();this.DataContext = this;Items = new List<Item>{new Item { Name = "Item 1", Description = "Description 1" },new Item { Name = "Item 2", Description = "Description 2" },new Item { Name = "Item 3", Description = "Description 3" }};}public List<Item> Items { get; set; }
}public class Item
{public string Name { get; set; }public string Description { get; set; }
}

2. 绑定复杂对象

当绑定复杂对象时,可以使用 DisplayMemberPath 来指定显示的属性,或者使用 ItemTemplate 自定义显示。

XAML代码
<ListBox x:Name="myListBox" HorizontalAlignment="Left" VerticalAlignment="Top" Width="200" Height="300"ItemsSource="{Binding Items}" DisplayMemberPath="Name"/>
后台代码
public partial class MainWindow : Window
{public MainWindow(){InitializeComponent();this.DataContext = this;Items = new List<Item>{new Item { Name = "Item 1", Description = "Description 1" },new Item { Name = "Item 2", Description = "Description 2" },new Item { Name = "Item 3", Description = "Description 3" }};}public List<Item> Items { get; set; }
}public class Item
{public string Name { get; set; }public string Description { get; set; }
}

五、总结

在本篇博客中,我们详细介绍了 WPF 中 ListBox 控件的常见属性和事件。通过这些示例代码,你可以了解如何设置 ListBox 的外观和行为,并且能够处理用户的基本交互。这些知识对于创建丰富和互动的用户界面至关重要。

内容摘要

在本篇博客《C# WPF入门学习主线篇(八)—— ListBox常见属性和事件》中,我们深入探讨了 WPF 中 ListBox 控件的使用。首先,我们介绍了 ListBox 的基本定义和常见属性,包括 ItemsSourceSelectedItemSelectedIndexSelectionMode 等。接着,我们展示了如何处理 ListBox 的各种事件,如 SelectionChangedLoadedMouseDoubleClick。通过这些示例代码,读者可以学会如何自定义 ListBox 的行为,以满足具体的应用需求。最后,我们还介绍了一些 ListBox 的高级用法,例如自定义项模板和绑定复杂对象。

希望这篇博客内容和总结能帮助你更好地理解和掌握 WPF 中 ListBox 的使用。如果有任何问题或需要进一步的指导,请在评论区留言。祝你学习愉快!


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

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

相关文章

Pulsar 社区周报 | No.2024-06-07 | Apache Pulsar 新分支 3.3 版本发布

“ 各位热爱 Pulsar 的小伙伴们&#xff0c;Pulsar 社区周报更新啦&#xff01;这里将记录 Pulsar 社区每周的重要更新&#xff0c;每周发布。 ” 本期主题&#xff1a;Apache Pulsar 新分支 3.3 版本发布 Apache Pulsar 新分支 3.3 版本发布&#xff1a;Apache Pulsar 3.3.0[1…

必备:产品经理工作文档大全

产品经理&#xff08;英文&#xff1a;Product manager&#xff0c;缩写&#xff1a;PM&#xff09;也称产品企划&#xff0c;是指在公司中针对某项或某类的产品进行规划和管理的人员&#xff0c;主要负责产品的研发、制造、营销、渠道等工作。 产品经理是很难定义的一个角色&a…

DeepSORT(目标跟踪算法)中的数值表格与调参的关系

DeepSORT&#xff08;目标跟踪算法&#xff09;中的数值表格与调参的关系 flyfish DeepSORT&#xff08;目标跟踪算法&#xff09;中的马氏距离详解&#xff08;很详细&#xff09; DeepSORT&#xff08;目标跟踪算法&#xff09;中 可以设置阈值进行异常检测或目标跟踪的原…

问题:在信息点统计表中,对于没有信息点的工作区或者房间填写,表明已经分析过该区域 #微信#职场发展#职场发展

问题&#xff1a;在信息点统计表中,对于没有信息点的工作区或者房间填写,表明已经分析过该区域 参考答案如图所示

学历还算能力的一部分吗(机器人方向)

前篇 在人工智能时代&#xff0c;学历还算是能力的一部分吗&#xff1f; 之前写过一篇&#xff0c;现在感觉应该是不严谨&#xff0c;不准确的。 AI如何看待能力&#xff0c;学历&#xff0c;文凭-CSDN博客 那一篇讨论了&#xff1a;{文凭}⊂{学历}⊂{能力} 本篇 不合格且…

【Echarts系列】带图片的饼图

【Echarts系列】带图片的饼图 序前提说明示例数据格式代码动态旋转图片 序 为了节省后续开发学习成本&#xff0c;这个系列将记录我工作所用到的一些echarts图表。 前提说明 因为饼图中间需要添加图片&#xff0c;所以比较特殊&#xff0c;对于饼图中间数据的对齐很容易出现…

正大国际期货:原油投资出现亏损的五种心理弱点

在原油投资当中&#xff0c;有五种心理弱点最容易导致投资者失败&#xff0c;必须注意加以克服! 盲目胆大心理。 有些投资者从未认真系统地学习过投资理论技巧&#xff0c;也没有经过任何模拟训练&#xff0c;甚至连最起码的投资基础知识都不明白&#xff0c;就贸然的进入原油…

企业管理/市场经营/自我管理,500+个经典职场工具 . rar

​500N个实用管理工具包&#xff0c;精选人力资源从业者必备之132项工具、40个管理者实效管理工具、成功自我管理的29个工具、常见的9种营销分析工具等&#xff0c;成功自我管理必备工具。 与班主任联系&#xff0c;即可获得完整资料包&#xff01; 1.PEST分析 2.五力分析 3.…

哈尔滨等保如何做?

哈尔滨等保测评是确保信息系统安全稳定运行的重要一环&#xff0c;它涉及到对业务、资产、安全技术和安全管理的全面调研和评估。本文将详细阐述哈尔滨等保测评的实施步骤和注意事项&#xff0c;帮助读者更好地理解和执行等保测评工作。 首先&#xff0c;我们需要明确等保测评的…

Hexo+Github搭建个人博客教程

hexo官网&#xff1a;https://hexo.io/zh-cn/ butterfly 主题设置&#xff1a;https://butterfly.js.org/ GitHub地址&#xff1a;https://github.com/jerryc127/hexo-theme-butterfly 基础命令 初始化博客命令&#xff1a;hexo init “文件名” 开启本地服务&#xff08;本…

Docker:Docker容器使用

文章目录 容器与宿主机复制容器环境变量设置镜像的导出和导入 由于篇幅原因&#xff0c;把后续的使用搬到这篇来 容器与宿主机复制 启动一个nginx服务 rootVM-24-7-ubuntu:~# docker run --name nginx -p 80:80 -d nginx 7a1578bedd97ffc48e9516d03a148c69e216a30f2d18f2624…

【MySQL】复合查询+表的内外连接

复合查询表的内外连接 1.基本查询回顾2.多表查询3.自连接4.子查询4.1单列子查询4.2多列子查询 5.在from子句中使用子查询6.合并查询7.表的内连和外连7.1内连接7.2外连接7.2.1左外连接 7.2.2右外连接 点赞&#x1f44d;&#x1f44d;收藏&#x1f31f;&#x1f31f;关注&#x1…

Java程序设计————从控制台输入

向控制台输入信息可以借助Scanner扫描器类来实现 语法&#xff1a; Scanner input new Scanner(System.in); 提示 &#xff08;1&#xff09;在使用Scanner类型之前&#xff0c;需要首先指明Scanner类所在的位置&#xff0c;既通过代码 import java.util.Scanner; &…

超强的文本转语音模型ChatTTS,一键打包,免费使用

超强的文本转语音模型ChatTTS&#xff0c;一键打包&#xff0c;免费使用 项目简介项目亮点安装使用python 代码直接引入一键启动包安装部署 ChatTTS webUI 小结一下 文本转语音&#xff08;TTS&#xff09;在生活中的应用非常的广泛&#xff0c;比如有声小说、语音导航&#xf…

电脑安全模式怎么进?详细步骤一学就会!

电脑安全模式是一种特殊的启动模式&#xff0c;加载最少的驱动程序和服务&#xff0c;帮助用户解决系统问题&#xff0c;如驱动程序冲突、病毒感染或系统文件损坏。进入安全模式可以帮助您诊断和修复问题&#xff0c;恢复系统的正常运行。本文将介绍电脑安全模式怎么进的三种方…

长期套餐是不是永久套餐?注意:并不是!

当我们在网上选择流量卡时&#xff0c;除了有短期套餐外&#xff0c;还有不少标注着长期套餐的流量卡&#xff0c;那么&#xff0c;长期套餐是不是永久套餐呢&#xff1f;能一直使用吗&#xff1f; ​ 在这里小编要说一下&#xff0c;长期套餐≠永久套餐 长期套餐就是字面意思…

上海斯歌荣获“2023年度杰出数字化转型方案提供商”奖项

为表彰上海斯歌在各行业的数字化转型事业中所做出的突出贡献&#xff0c;经CIO时代、新基建创新研究院专家组评审认定&#xff0c;授予上海斯歌“2023年度杰出数字化转型方案提供商”奖项。荣获该殊荣&#xff0c;不仅是业界对上海斯歌解决方案专业能力及落地实施能力的又一次认…

字符编码字符集那些事

此篇文章仅为网上资料的汇总&#xff0c;方便自己查询使用&#xff0c;原文如下&#xff1a; 参考文章1:一文读懂字符编码 参考文章2:菜鸟教程字符集 参考文章3:百度字符集 参考文章4:一个线上BUG彻底搞懂MySQL字符集&#xff0c;工作也快搞丢了 参考文章5:深入理解MySQL字符集…

Kaggle -- Titanic - Machine Learning from Disaster

新手kaggle之旅&#xff1a;1 . 泰坦尼克号 使用一个简单的决策树进行模型构建&#xff0c;达到75.8%的准确率&#xff08;有点低&#xff0c;但是刚开始&#xff09; 完整代码如下&#xff1a; import pandas as pd import numpy as npdf pd.read_csv("train.csv&quo…

我用香橙派做了一个Klipper 3D打印控制器

一个好用的Klipper 3D打印机&#xff0c;一定离不开一个可以稳定进行无线通信&#xff0c;而且性能足够&#xff0c;最重要是价格亲民的上位机。 所谓Klipper&#xff0c;简单来说就是一套可以通过联动上、下位机来有效提升3D打印精度的固件。它拥有高精度的步进电机控制&#…