WPF下实现控件的拖拽功能

WPF鼠标拖拽的最佳实现 这篇博客介绍了如何在WPF应用程序中实现拖拽控件的功能。通过使用gong-wpf-dragdrop库、PreviewMouseDown、PreviewMouseMove和PreviewMouseUp事件,结合TranslateTransform来实现控件随鼠标移动的效果。在文章中详细讲解了如何处理拖拽样式,鼠标按下、移动和释放事件,通过阅读这篇博客,读者可以快速了解如何在WPF应用程序中实现控件拖拽功能,并学习到优化代码的方法。 阅读详情
AI摘要

本文介绍了在WPF环境下实现控件的拖拽功能,以实现类似流程图的逻辑布局。通过拖放操作,使用DataObject封装数据,并设置允许拖放的目标对象,如Canvas。文章详细讲解了拖动源、目标对象和拖放过程,并提供了效果演示及源码链接,旨在促进逻辑可视化的编程方法。

流程图系列文章

第一章 WPF下实现控件的拖拽功能



前言

我们写运动控制上位机程序的时候,经常是要考虑如何实现一个流程,我们要考虑,完成当前步骤后,下一个步骤要实现什么,判断条件,满足后的步骤是什么,不满足条件的步骤又是什么,或者需要一直等待条件满足才开始下一个步骤,也要考虑超时都不满足条件需要走另一个步骤,根据条件也有可能会跳转回原来的步骤,这些逻辑通常都是很繁琐的(使用if-elseif、switch-case),而且写好后再次修改时,容易漏改忘改等造成逻辑不稳定问题;这里,我们介绍一种全新的实现逻辑的方式:通过流程图的原理去实现这些业务性的繁琐的逻辑,实现逻辑可视化,编程拖拉拽。
首先,我们先实现第一步,WPF中的控件,实现流程图样式,可拖拽流程图控件出来到画布上,在画布上可自由拉拽到新的位置,实现逻辑可视化排布。
什么是拖拽?就是拖放,是指将目标从拖动源中拖出,然后放置到目标对象上。
在这里,我们会有技术点详解、代码展示、效果展示、源码链接!


一、目标

需要拖放的对象,这个对象可能是一副图片,或者是TextBox中的文字,也可能是List中的某一项,在这里,我们使用的是Border源(使用VS的Blend.exe可轻松绘制不同形状),分别是不同形状的,类似于流程图,可参考下图形状。
在这里插入图片描述
在WPF中,我们使用一个实现了IDataObject的接口来封装目标,这个接口有以下几个代表方法:

  • GetData,检索指定数据格式的数据对象
  • GetDataPresent,查看是否具有指定格式的数据,或者数据是否可以转换为指定方式
  • GetFormats,返回一个格式列表,此数据对象中的数据以这些格式存储,或可以转换为这些格式
  • SetData,在此数据对象中存储指定的数据
    在这里插入图片描述在这里插入图片描述WPF提供DataObject类中的IDataObject的基本实现;对于许多常见数据传输方案,常用DataObject类已足够满足要求
    以下代码我们用DataObject包装了ListView中的一行数据:
    DataObject data = new DataObject(typeof(ItemInfo), listview.SelectedItem);

二、拖动源

目标原来所在的容器,例如一个Canvas,一个TextBox,或者一个List,在这里我们使用画布来放置拖动源。

三、目标对象

目标的“新家”,例如一个Canvas,一个TextBox,或者一个List
UIElement类中,有一个AllowDrop属性,用来指示元素是否可用作拖放操作的目标,该属性默认值为flase,因此我们需要将该值设置为true
<object AllowDrop=”bool” …/>
在这里,我们的目标对象使用画布
要注意:画布需要给它设置一个背景颜色,不然无法接收到事件

四、拖放

拖(Drag):一个动作,一般是在目标上按住鼠标左键,然后移动鼠标
使用DragDrop.DoDragDrop发起一个拖动动作
使用方法:

/// <summary>
/// 拖拽控件出来
/// </summary>
/// <param name="dataSource">要拖动的控件</param>
/// <param name="data">要拖动的数据对象</param>
/// <param name="dragDropEffects">拖动操作的选项</param>
public static void DoDragDrop(DependencyObject dataSource, object data, DragDropEffects dragDropEffects)
{
    DragDrop.DoDragDrop(dataSource, data, dragDropEffects);
}

放(Drop):在目标对象上松开鼠标左键
和放置有关的事件:

  • DragEnter,将对象拖至放置目标的边框内发生此事件
  • DragLeave,对对象拖出放置目标的边框时发生此事件
  • DragOver,在放置目标的边框内拖动(移动)对象时发生此事件
  • Drop,将对象放到放置目标上时发生此事件
<!--Canvas是拖拽的放置对象,需要设置:Drop事件,拖拽完成时触发;AllowDrop,允许拖拽;BackGroud,设置一个颜色,不然无法接收到事件-->
<Canvas x:Name="canvas" Grid.Column="1" Drop="Canvas_Drop" AllowDrop="True" Background="Transparent"/>

五、效果演示

在这里插入图片描述

六、源码链接

源码下载:基于流程图实现无代码编程业务逻辑(1)


总结

逻辑可视化,编程拖拉拽

C# WPF中用代码移动控件 这个报错说的很清楚,就是被移动控件必须从原位置中移出,才能放入新位置。imageMonitorBorder是个Border控件,它虽然“包裹”着image控件,但它只有Child,无法移除子控件。都是有Children的,因此控件的移动需要在这个层面上进行。用代码移动控件时,容易出现报错:指定的元素已经是另一个元素的逻辑子元素。但是,不是所有控件都有Children属性的,有的元素只有Child。我们看一下布局文件:。1、被移动控件父控件.Children.Remove(被移动控件) 阅读详情

相关推荐

WPF实现带动态效果的控件拖拽功能

通过上述的步骤,我们可以将动态效果和动画系统结合在一起,以实现平滑的拖动效果。在实现过程中,我们利用了WPF中的来实现控件的实时移动,并通过创建了动画效果。这样不仅提升了用户的交互体验,也使得控件的拖动看起来更加自然和流畅。请注意,本章节的代码示例与逻辑分析都为简化版本,实际开发中需要处理更多边界情况,如控件的边界限制、动画的暂停与恢复等。在实际应用中,还需要针对不同控件的特性来调整动画参数,以达到最佳的用户体验。

weixin_29009401的博客 1015

WPF-DragDrop拖拽文字、文件、图片...

是否允许作为拖拽目标:进入容器边缘触发:拖拽放下触发。

rwo_bear的博客 4677

WPF自定义控件:实现ListView项可拖拽排序功能

本文还有配套的精品资源,点击获取 简介:本文详细介绍了如何在WPF平台上创建一个支持通过拖拽方式重新排序ListView项的自定义控件。该控件利用.NET框架提供的事件处理、数据绑定机制,以及MVVM设计模式,实现了从基础的拖放操作到数据源更新的整个流程。文章还将探讨如何通过添加动画效果、异步处理等手段优化用户体验和性能。 1. WPF自定义ListView控件概...

weixin_35307279的博客 2022

WPF编程,实现鼠标拖动控件并带有中间动效

要实现鼠标对控件的拖拽移动

君一席 3801

实现WPF DataGrid行拖拽排序功能

本文还有配套的精品资源,点击获取 简介:本文详细讲解了如何在WPF中实现DataGrid控件的行拖拽排序功能,该功能允许用户通过拖动行来调整数据顺序。文章首先介绍创建自定义的SortableDataGrid类,继承自DataGrid,并添加必要的事件处理程序以支持排序。详细步骤包括开启拖放操作、追踪鼠标移动、设置视觉提示以及执行排序逻辑。作者提供了样例代码以及优化性能的建议...

weixin_36122351的博客 1597

WPF拖拽交互全攻略及实现自定义拖拽控件及数据交换技巧解析

本文介绍了在WPF中实现拖拽功能的概念和步骤。拖拽操作涉及拖动源(Drag Source)和拖动目标(Drop Target),数据通过数据对象(Data Object)传递。在WPF中,通过DoDragDrop方法启动操作,设置AllowDrop属性为true来启用放置目标,文章还提供了使用示例。此外,还讨论了在拖拽操作期间可能需要处理的其他事件,如GiveFeedback,以及如何使用DataObject方法来检查和处理数据。最后,提到了在实际开发中遇到的问题,并提供了一个自定义拖拽控件的实现思路和代码

qq_42399932的博客 5501

WPF中实现缩放拖拽功能的布局控件:提升交互体验的利器

WPF中实现缩放拖拽功能的布局控件:提升交互体验的利器 【下载地址】WPF中实现缩放拖拽功能的布局控件 这是一款专为WPF应用程序设计的布局控件,基于Canvas开发,旨在简化用户界面交互的实现。控件核心功能包括以鼠标为中心的滚轮缩放和鼠标左键拖拽,这些特性使得用户能够直观地操作界面元素,提升整体用户体验。通过利用Can...

gitblog_06755的博客 851

TreeView控件的拖拽操作与源代码实现

TreeView控件是图形用户界面中常见的组件之一,主要用于展示具有层级关系的数据,例如文件夹结构、分类目录等。它通过树状结构展示节点,每个节点可包含子节点,形成一个多级的层次体系。在不同平台和框架中,TreeView的外观和实现可能有所差异,但基本功能相似。拖放操作,通常简称为“拖放”,指的是用户界面(UI)中的一种交互方式,它允许用户移动对象,通过简单的拖拽来完成各种任务。在计算机系统中,拖放操作不仅提高了用户效率,也使得复杂的数据操作变得直观和便捷。拖放的实现依赖于事件驱动编程模型。

weixin_31715353的博客 990

WPF中实现缩放拖拽功能的布局控件

WPF中实现缩放拖拽功能的布局控件 【下载地址】WPF中实现缩放拖拽功能的布局控件 这是一款专为WPF应用程序设计的布局控件,基于Canvas开发,旨在简化用户界面交互的实现。控件核心功能包括以鼠标为中心的滚轮缩放和鼠标左键拖拽,这些特性使得用户能够直观地操作界面元素,提升整体用户体验。通过利用Canvas的灵活布局特性...

gitblog_06793的博客 364

WPF实现控件的移动操作

WPF实现控件的移动操作,实现大小拖动,位置移动,简单易学

ABP多租户实现

abp会调用ITenantStore.Find(Guid)方法去查tenant是否存在。要骗过abp就得自己实现ITenantStore并替换原来的实现。abp会自动解jwt里的tenant id,并且尝试验证它。这时候我们之前实现的ITenantStore就可以骗过abp。你要不想骗它也成,反正这个类是可以依赖注入的,你爱咋验证就咋验证。不用open id dict,只用jwt,让abp轻起来。在原来生成jwt的地方加入tenantId。module上也要加DependsOn。

m0_46704355的博客 470

浅谈WPF之控件拖拽与拖动

使用过office的visio软件画图的小伙伴都知道,画图软件分为两部分,左侧图形库,存放各种图标,右侧是一个画布,将左侧图形库的图标控件拖拽到右侧画布,就会生成一个新的控件,并且可以自由拖动。那如何在WPF程序中,实现类似的功能呢?在控件对象的MouseDown,MouseMove,MouseUp三个事件中,实现控件的拖动效果。以上就是WPF之控件拖拽与拖动的全部内容,希望能够一起学习,共同进步。,仅供学习分享使用,如有不足之处,还请指正。注意,在页面布局中,为图标库中的。

绳锯木断,水滴石穿,专心写文,无问西东!!! 4635

新手必看!无人机定高PID调参避坑指南:从理论到实战的完整流程

本文为无人机新手提供定高PID调参的完整指南,从传感器融合到抗风策略,详细解析多传感器融合、PID控制参数调试及环境干扰应对。通过实战案例和代码示例,帮助开发者快速掌握无人机定高技术,避免常见调参陷阱,提升飞行稳定性。

spark7igniter的博客 221

WPF拖拽的实现以listview为例:为WPF应用添加互动新体验

WPF拖拽的实现以listview为例:为WPF应用添加互动新体验 去发现同类优质开源项目:https://gitcode.com/ 项目介绍 在现代的桌面应用程序设计中,用户体验的优化是提升产品竞争力的关键。WPF(Windows Presentation Foundation)作为一种用于构建桌面客户端应用程序的UI框架,提供了丰富的控件和功能来提升用户互动体验。本文将重点介绍如何在WPF中实...

gitblog_06731的博客 329

sentaurus学习笔记(HFET_pGate_GaN仿真)(五)

`(sdedr:define-constant-profile`和`(sdedr:define-constant-profile-region`命令用于定义并应用一个恒定的活性硼掺杂浓度剖面`"ndop_GaN_gate_const"`到氮化镓栅极层上,其值为`NpGaN_gate`。- `"Oxide"`指定了这一层的材料名称(在这里代表氧化层),而`"nucleation"`是这一层在仿真中的标识名称。- `"GaN"`指定了这一层的材料名称,而`"GaN_gate"`是这一层在仿真中的标识名称。

qq_52640792的博客 940

使用electron静默打印

使用electron静默打印 1.使用electron打印的理由 很多情况下程序中使用的打印都是用户无感知的。并且想要灵活的控制打印内容,往往需要借助打印机给我们提供的api再进行开发,这种开发方式非常繁琐,并且开发难度较大。 electron提供的打印api可以非常灵活的控制打印设置的显示,并且可以通过html来书写打印内容。 2.api ele...

w1366352655的博客 945

WPF 拖拽的实现(以listview为例)

WPF 拖拽的实现(以listview为例) 去发现同类优质开源项目:https://gitcode.com/ 本文档详细介绍了如何在WPF中实现ListView控件的拖拽功能。通过实际代码示例和操作步骤,帮助开发者掌握WPF拖拽功能的实现技巧。 文件简介 标题:WPF 拖拽的实现(以listview为例) 内容:本文档将指导你如何为WPF中的ListView控件添加拖拽功能,以提升用户体验。 ...

gitblog_06769的博客 330

京东商品多维特征提取:基于时空大模型的实时库存预测接口设计

在电商行业,库存管理是供应链的核心环节之一。库存水平过高会导致资金占用、仓储成本增加,而库存水平过低则可能引发缺货风险,影响客户满意度和平台声誉。京东作为中国领先的电商平台,拥有海量的商品数据和复杂的业务场景,传统的库存预测方法难以应对市场动态变化和业务需求。时空大模型作为一种融合时间序列分析和空间特征提取的前沿技术,能够捕捉商品多维特征在时空维度上的变化规律,为实时库存预测提供更精准的决策依据。

FB13713612741的博客 954

WPF自定义控件(四)の自定义控件

WPF自定义控件(四)の自定义控件 原文:WPF自定义控件(四)の自定义控件在实际工作中,WPF提供的控件并不能完全满足不同的设计需求。这时,需要我们设计自定义控件。 这里LZ总结一些自己的思路,特性如下: Coupling UITemplate Behaviour Function Package 下面举例说说在项目中我们...

weixin_30896763的博客 107

FPGA图像处理入门 ZYNQ7020 图像中值膨胀腐蚀滤波

图像处理的三种滤波 中值滤波应用较为广泛 综合膨胀和腐蚀可以实现边缘检测。

Coast_的博客 714

《供应链金融风控模型设计:多维度数据整合与动态风险预警机制》

注:方案突出供应链金融「三流合一」(资金流、物流、信息流)的风控逻辑,通过多维度数据整合与动态预警,解决传统风控中中小企业信用评估难、链条风险传导监测滞后的问题。◦ 构建供应链拓扑图,计算「核心企业违约对上下游企业的影响系数」(如某电子厂商违约时,其前五大供应商的风险权重自动提升40%)• 区块链应用:将核心企业应付账款上链存证,防止「一票多融」欺诈(如某供应商用同一应收账款在多家银行融资)◦ 财务数据:核心企业审计报告、上下游企业纳税数据(增值税发票频次/金额)

2501_91651383的博客 1548

扩展WPF的TreeView,完成数据绑定和拖拽功能

WPF看了很长时间了,但一直没怎么动手实践,正好任务需要,扩展了WPF的标准TreeView控件,并作为基础控件,支持下面的功能: 数据绑定 拖拽 下载地址:https://download.youkuaiyun.com/download/jfyy/11107213 控件做好后的使用方法: 先定义TreeNode的Model,Model用来定义TreeNode的状态。 public clas...

静以修身 3040

Dify 第 13 篇 Dify 工作流 详解

工作流通过将复杂任务分解为节点降低复杂度,提升LLM应用的性能和稳定性。Dify工作流分为两类:Chatflow面向对话场景(如客服),支持多轮对话;Workflow面向批处理场景(如翻译),提供逻辑节点实现自动化。核心概念包括节点、变量(系统/会话/环境变量)及应用类型差异:Chatflow支持中间输出和对话历史,Workflow仅支持结束节点输出。系统变量以"sys"开头,用于全局数据传递,不同应用类型变量不同,如Chatflow的sys.query存储用户输入,Workflow的s

甘蓝的专栏 3246

WPF Treeview拖拽功能资源

WPF Treeview拖拽功能资源 去发现同类优质开源项目:https://gitcode.com/ 此仓库包含了一个WPF (Windows Presentation Foundation) Treeview控件的拖拽功能实现资源。该资源可以使得开发者轻松地将拖拽交互集成到自己的WPF应用程序中。 资源描述 标题: WPF Treeview拖拽 功能: 实现WPF中Treeview控件的拖拽...

gitblog_06774的博客 314

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

WPFTreeview拖拽功能资源:提升WPF应用程序交互体验的核心功能

WPFTreeview拖拽功能资源:提升WPF应用程序交互体验的核心功能 去发现同类优质开源项目:https://gitcode.com/ 在Windows Presentation Foundation (WPF)应用程序开发中,Treeview控件是展示层次结构数据的重要组件。而WPFTreeview拖拽功能资源,正是为开发者提供了一种高效集成拖拽交互的解决方案。以下是对此项目的详细介绍。 项...

gitblog_06799的博客 377

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

上一篇: SMEMA标准协议
下一篇: 【C#学习笔记】【Attribute】
Aflashstar
博客等级 码龄12年 205粉丝 38原创
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值