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

news2025/1/13 15:41:19

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.coloradmin.cn/o/1810851.html

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

相关文章

java web如何调用py脚本文件

Controller public class IndexController {RequestMapping("/pythonTest")ResponseBodypublic String pythonTest(){// 假设你的Python脚本名为script.pyString pythonScriptPath "D:\\project\\c1\\hello.py";ProcessBuilder processBuilder new Proce…

【解读】小提琴图

ref&#xff1a;解读文献中的箱线图&#xff08;Box-plot&#xff09;和小提琴图&#xff08;Violin-plot)&#xff09;_小提琴图和箱线图的区别-CSDN博客小提琴图展示了每个变量的数据分布情况&#xff0c;通过图中的“小提琴”形状可以看出数据的密度和分布情况。 在图中&…

在Visual Studio Code中使用pytest进行AWS Lambda函数测试的最佳实践

背景/引言 在现代软件开发中&#xff0c;自动化测试已经成为保证代码质量的重要一环。对于AWS Lambda函数开发者来说&#xff0c;使用pytest进行单元测试和集成测试是一个高效且可靠的方法。本文将介绍在Visual Studio Code中使用pytest测试AWS Lambda函数的最佳实践&#xff…

攸信动态丨攸信技术接受厦门电视台《厦视直播室》栏目组采访

近日&#xff0c;厦门攸信信息技术有限公司&#xff08;简称“攸信技术&#xff08;UMS&#xff09;”&#xff09;荣幸地接受厦门电视台《厦视直播室》栏目组的采访。 智能制造作为当今技术创新的前沿阵地&#xff0c;正日益成为推动工业发展的核心力量。攸信技术&#xff0c;…

门禁系统一套多少钱,门禁系统设备的价格

门禁系统一套多少钱&#xff0c;门禁系统设备的价格 现今门禁系统有诸多品牌&#xff0c;不同品牌的价格亦有所差别&#xff1b;知名的大品牌价格往往更贵&#xff0c;而一些小众品牌又不太了解&#xff0c;价格虽便宜些&#xff0c;却担心质量不佳&#xff0c;售后也不好处理&…

适用于 macOS 的最佳免费数据恢复软件

升级到 macOS 后&#xff0c;它可以帮助您从 HDD、SSD、存储卡、USB 闪存驱动器、数码相机或其他存储介质设备中完全恢复已删除、格式化或无法访问的数据。 当 macOS Monterey 用户寻找数据恢复解决方案时&#xff0c;免费数据恢复软件始终是一个不错的选择。实际上&#xff0…

FuTalk设计周刊-Vol.060

#AI漫谈 热点捕手 1.浙大、蚂蚁集团推出MaPa&#xff1a;文本生成超真实3D模型 与传统纹理方法不同的是&#xff0c;MaPa通过文本能直接生成高分辨率、物理光照、超真实材质的3D模型&#xff0c;可以极大提升游戏、VR、AR、影视等行业的开发效率。 链接https://mp.weixin.qq…

Elasticsearch 为时间序列数据带来存储优势

作者&#xff1a;来自 Elastic Martijn Van Groningen, Kostas Krikellas 背景 Elasticsearch 最近投资了对存储和查询时间序列数据的更好支持。存储效率一直是关注的主要领域&#xff0c;许多项目取得了巨大的成功&#xff0c;与将数据保存在标准索引中相比&#xff0c;可以节…

STM32-CAN

一、CAN总线简介 1.1 CAN简介 CAN 是 Controller Area Network 的缩写&#xff08;以下称为 CAN&#xff09;&#xff0c;是 ISO 国际标准化的串行通信 协议。异步半双工。 ISO11898&#xff1a;123kbps~1Mbps。 ISO11519&#xff1a;125kbps 特点&#xff1a; 多主控制没…

高考后的家庭移民新选择

随着高考的落幕&#xff0c;您是否在思考未来的更多可能性&#xff1f;移民&#xff0c;作为一种生活选择&#xff0c;为许多家庭提供了一个全新的生活和教育环境。我们理解&#xff0c;每个家庭都希望为自己的孩子提供最好的未来。 移民国家通常拥有多元和包容的教育体系&…

Nginx Location匹配 和 Rewrite重写

前言&#xff1a;Nginx 正则表达式 ^匹配输入字符串的起始位置$匹配输入字符串的结束位置*匹配前面的字符零次或多次匹配前面的字符一次或多次&#xff1f;匹配前面的字符零次或一次.匹配除 “\n” 之外的任何单个字符\将后面接着的字符标记为一个特殊字符或一个原义字符或一个…

AI写作工具:提升工作效率的五大利器

不知道大家有没有发现&#xff0c;随着人工智能技术的快速发展&#xff0c;AI工具正逐渐渗透到我们日常生活的各个方面&#xff0c;极大地提高了我们的工作和学习效率。无论是AI写作、AI绘画、AI思维导图&#xff0c;还是AI幻灯片制作&#xff0c;这些工具已成为我们不可或缺的…

【计算机毕业设计】266基于微信小程序的在线点餐

&#x1f64a;作者简介&#xff1a;拥有多年开发工作经验&#xff0c;分享技术代码帮助学生学习&#xff0c;独立完成自己的项目或者毕业设计。 代码可以私聊博主获取。&#x1f339;赠送计算机毕业设计600个选题excel文件&#xff0c;帮助大学选题。赠送开题报告模板&#xff…

49、Flink 的数据源的 SplitReader API 详解

SplitReader API a&#xff09;概述 核心的 SourceReader API 是完全异步的&#xff0c;但实际上&#xff0c;大多数 Sources 都会使用阻塞的操作&#xff0c;例如客户端&#xff08;如 KafkaConsumer&#xff09;的 poll() 阻塞调用&#xff0c;或者分布式文件系统&#xff…

包装机故障排查与修复方法:确保生产线的稳定运行

在现代化的工业生产中&#xff0c;包装机作为生产线上的重要一环&#xff0c;其稳定运行直接关系到产品的质量和生产效率。然而&#xff0c;包装机在使用过程中难免会遇到各种故障&#xff0c;如何快速准确地排查并修复这些故障&#xff0c;确保生产线的稳定运行&#xff0c;成…

【Echarts系列】带图片的饼图

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

【npm】console工具(含胶囊,表格,gif图片)

这是一款控制台花样输出工具 相对丰富的输出方式 文本输出属性值输出胶囊样式输出表格输出图片输出&#xff08;含动图&#xff09; 安装 npm install v_aot引用 import v_aot from "v_aot";字段说明 字段类型属性字符串值字符串类型default 、 primary 、 suc…

Centos用自定义java安装包替换系统java版本

一.下载自定义安装java压缩包&#xff0c;比如 jdk-8u191-linux-x64.tar.gz 二.解压到/usr/java/ 下 tar -zxvf jdk-8u191-linux-x64.tar.gz 三.执行命令 update-alternatives --install /usr/bin/java java /usr/java/jdk1.8.0_191/bin/java 300 update-alternatives --i…

【全开源】旅游系统小程序(Uniapp+FastAdmin+ThinkPHP)

&#x1f308;暑假到来&#xff0c;旅游系统小程序助你畅游无忧&#xff01;&#x1f392; 旅游系统&#xff0c;包含消费者端&#xff08;手机端&#xff09;、机构工作人员&#xff08;手机端&#xff09;、机构端&#xff08;PC&#xff09;、平台管理端&#xff08;PC&…

Python基础速成

文件操作 文件读取 with open语法 文件写入 注意事项 文件追加 异常、模块与包 捕获异常 捕获方法 捕获传递 模块的导入与自定义 定义 导入方式 自定义 测试模块 注意事项 python包 定义 操作 第三方包 定义 pip指令安装包