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

[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/

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要实现ListBox的拖动排序,需要使用WPF和MVVM的一些技巧。下面是一些大致的步骤: 1. 在ViewModel中定义一个ObservableCollection,用于绑定ListBox的ItemsSource属性。 2. 在ListBox的ItemTemplate中,绑定ListBoxItem的PreviewMouseDown事件和PreviewMouseMove事件。这两个事件分别用于开始拖动和移动拖动项。 3. 在PreviewMouseDown事件中,使用VisualTreeHelper找到ListBoxItem的父ListBox,并将拖动项从ObservableCollection中移除。 4. 在PreviewMouseMove事件中,使用DragDrop.DoDragDrop方法启动拖动操作,并将拖动项的索引和DataObject传递给该方法。 5. 在ViewModel中,定义一个DragOver命令和一个Drop命令。DragOver命令用于处理拖动项经过其他项时的逻辑,Drop命令用于处理拖动项放下时的逻辑。这两个命令的参数都包含了拖动项的索引和目标项的索引。 6. 在ListBox的ItemContainerStyle中,绑定ListBoxItem的DragOver事件和Drop事件到ViewModel中的DragOver命令和Drop命令。 7. 在ViewModel的Drop命令中,将拖动项插入到ObservableCollection中目标项的位置,并更新所有项的排序。 这些步骤只是大致的概述,具体实现时还需要考虑一些细节,例如拖动项和其他项的样式、拖动项和其他项的交互效果等等。如果您需要更详细的实现细节,请参考以下链接: https://www.c-sharpcorner.com/UploadFile/raj1979/drag-and-drop-items-in-listbox-in-wpf-mvvm/ https://www.codeproject.com/Articles/30905/Drag-and-Drop-Items-in-WPF-ListView-Control https://www.wpf-tutorial.com/listview-control/listview-drag-drop-sorting-mvvm/
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值