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

WPF中LISTITEM的拖拽

此方法较容易实现list中项的拖拽,不过其缺陷是无法将选中的ITEM取出来,SELECTED事件被MOUSELEFTBUTTONDOWN吃掉了。

不罗嗦了,以下是DEMO的源码:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;
using System.Collections.ObjectModel;
using System.Collections;
namespace DragTest
{
    /// <summary>
    /// MainWindow.xaml 的交互逻辑
    /// </summary>
    public partial class MainWindow : Window
    {
        ObservableCollection<string> obv = new ObservableCollection<string>();
        public MainWindow()
        {
            InitializeComponent();
            foreach (TimeZoneInfo tzi in TimeZoneInfo.GetSystemTimeZones())
            {
              lst1.Items.Add(tzi.ToString());
            }
           
        }
        ListView dragSource = null;
        private void lst1_PreviewMouseLeftButtonDown(object sender, MouseButtonEventArgs e)
        {
            ListView parent = (ListView)sender;
            dragSource = parent;
            object data = GetDataFromListBox(dragSource, e.GetPosition(parent));
            if (data != null)
            {
                
                DragDrop.DoDragDrop(parent, data, DragDropEffects.Copy);
            }
        }
        private static object GetDataFromListBox(ListBox source, Point point)
        {
            UIElement element = source.InputHitTest(point) as UIElement;
            if (element != null)
            {
                object data = DependencyProperty.UnsetValue;
                while (data == DependencyProperty.UnsetValue)
                {
                    data = source.ItemContainerGenerator.ItemFromContainer(element);
                    if (data == DependencyProperty.UnsetValue)
                    {
                        element = VisualTreeHelper.GetParent(element) as UIElement;
                    }
                    if (element == source)
                    {
                        return null;
                    }
                }
                if (data != DependencyProperty.UnsetValue)
                {
                    return data;
                }
            }
            return null;
        }
        //listbox1 to listbox2
        private void lst2_Drop(object sender, DragEventArgs e)
        {
            ListView parent = (ListView)sender;
            if (parent.Name == lst2.Name)
            {
                object data = e.Data.GetData(typeof(string));
                ((IList)dragSource.Items).Remove(data);
                if (!parent.Items.Contains(data))
                {
                    parent.Items.Add(data);
                }
            }
        }
        //listbox2 to listbox1
        private void lst1_Drop(object sender, DragEventArgs e)
        {
            
            ListView parent = (ListView)sender;
            if (parent.Name == lst1.Name)
            {
                object data = e.Data.GetData(typeof(string));
                ((IList)dragSource.Items).Remove(data);
                if (!parent.Items.Contains(data))
                {
                    parent.Items.Add(data);
                }
            }
        }
        private void lst2_PreviewMouseLeftButtonDown(object sender, MouseButtonEventArgs e)
        {
            ListView parent = (ListView)sender;
            dragSource = parent;
            object data = GetDataFromListBox(dragSource, e.GetPosition(parent));
            if (data != null)
            {
                DragDrop.DoDragDrop(parent, data, DragDropEffects.Move);
            }
        }

    }
}


相关文章:

  • JSON使用的一些总结
  • c++ 简单SOCKET 通信
  • android第一个项目--hello world
  • 又一个恶心的驱动的问题
  • 点击窗体任意位置拖动 c#
  • 天翼宣传的软肋
  • asp.net gridview 分页
  • Flex与.NET互操作(四):使用HttpService、URLReqeust和URLLoader加载/传输数据
  • WPF组件化开发技术实践
  • 犀利广州话
  • Flex与.NET互操作(五):使用FileReference+HttpHandler实现文件上传/下载
  • wpf mvvm模式 实例
  • 近期谷歌网页收录数量已经明显超过百度
  • JS操作cookie
  • JS实现拖拽
  • [deviceone开发]-do_Webview的基本示例
  • electron原来这么简单----打包你的react、VUE桌面应用程序
  • ESLint简单操作
  • java2019面试题北京
  • JavaScript 是如何工作的:WebRTC 和对等网络的机制!
  • javascript 总结(常用工具类的封装)
  • JavaScript实现分页效果
  • MySQL用户中的%到底包不包括localhost?
  • nginx 负载服务器优化
  • Spring框架之我见(三)——IOC、AOP
  • 程序员该如何有效的找工作?
  • 开放才能进步!Angular和Wijmo一起走过的日子
  • #define与typedef区别
  • #在线报价接单​再坚持一下 明天是真的周六.出现货 实单来谈
  • (4)事件处理——(7)简单事件(Simple events)
  • (TipsTricks)用客户端模板精简JavaScript代码
  • (阿里巴巴 dubbo,有数据库,可执行 )dubbo zookeeper spring demo
  • (附源码)springboot人体健康检测微信小程序 毕业设计 012142
  • (附源码)ssm本科教学合格评估管理系统 毕业设计 180916
  • (附源码)计算机毕业设计ssm本地美食推荐平台
  • (十五)使用Nexus创建Maven私服
  • (一)80c52学习之旅-起始篇
  • (一)Neo4j下载安装以及初次使用
  • ***详解账号泄露:全球约1亿用户已泄露
  • **PHP二维数组遍历时同时赋值
  • .apk文件,IIS不支持下载解决
  • .dat文件写入byte类型数组_用Python从Abaqus导出txt、dat数据
  • .net获取当前url各种属性(文件名、参数、域名 等)的方法
  • .NET开源项目介绍及资源推荐:数据持久层 (微软MVP写作)
  • .one4-V-XXXXXXXX勒索病毒数据怎么处理|数据解密恢复
  • /deep/和 >>>以及 ::v-deep 三者的区别
  • @RequestMapping用法详解
  • [20150707]外部表与rowid.txt
  • [20170713] 无法访问SQL Server
  • [bbk5179]第66集 第7章 - 数据库的维护 03
  • [bzoj1006]: [HNOI2008]神奇的国度(最大势算法)
  • [BZOJ3211]:花神游历各国(小清新线段树)
  • [C/C++] -- 二叉树
  • [CC2642R1][VSCODE+Embedded IDE+IAR Build+Cortex-Debug] TI CC2642R1基于VsCode的开发环境
  • [CISCN2019 华北赛区 Day1 Web5]CyberPunk --不会编程的崽