亲测有效[WPF] ListBox 的双击事件处理,双击空白位置无效

本文详细介绍了WPF中ListBox双击事件的处理方法,包括如何通过MouseDoubleClick事件获取当前双击项的数据源和索引,以及如何判断鼠标是否位于选中项上。文章还提供了完整的代码示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

[WPF] ListBox 的双击事件处理
简单记录下 WPF 中的 ListBox 双击事件的处理,适用于数据源的方式。

处理 ListBox 的双击事件
事件名称:MouseDoubleClick。

函数原型:private void ListBox_MouseDoubleClick(object sender, MouseButtonEventArgs e)。

实参 sender 为 ListBox 实例(本文中名为 listbox)。e 为鼠标相关信息,可以通过 ChangedButton 来判断是哪个键按下了等等。

得到当前的双击项
ListBox 有 SelectedItem 属性 和 SelectedIndex 属性。 前者的值为对应的数据源的数据类型,后者的值为选中项的索引(从 0 开始,-1 为未选中)。

值得一提的是:双击 ListBox 的空白区域触发这个事件的时候,以上两个值仍然是当前选中项,并非无效。 所以还需要多一步操作:判断双击的时候鼠标是否的选中项控件内。

取得选中索引
var index = listbox.SelectedIndex;
取得索引对应的 ListBoxItem 容器
因为是采用数据源的方式,所以这个容器不能直接获取到。它需要调用 ContainerFromIndex 来获取。

var item = listbox.ItemContainerGenerator.ContainerFromIndex(index) as ListBoxItem;
判断是否鼠标双击时的项
这个比较简单,所有的控件都可以这样来做。

if(item.IsMouseOver) {

}
取得双击时的数据项
有多种方式。

上面选中项的数据上下文:item.DataContext
ListBox 的当前选中数据:listbox.SelectedItem
完整参考代码
if(listbox.SelectedIndex != -1)
{
// 取得容器控件
var item = listbox.ItemContainerGenerator.ContainerFromIndex(listbox.SelectedIndex) as ListBoxItem;
// 控件不为空 && 鼠标在控件内 && 左键按下
if(item != null && item.IsMouseOver && e.ChangedButton == MouseButton.Left)
{
var data = item.DataContext;
// 处理数据项
}
}
转载自 https://blog.twofei.com/710/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值