public static class DragDrop
{
private static bool IsDragging = false;
private static Point curPoint;
private const int MAX_ZINDEX = 99999;
private const double CURRENT_OPACITY = 0.5;
private static int lastZIndex;
private static double lastOpacity;
private static void sender_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
{
UIElement uiElement = sender as UIElement;
if (uiElement != null)
{
uiElement.CaptureMouse();
lastZIndex = (int)uiElement.GetValue(Canvas.ZIndexProperty);
uiElement.SetValue(Canvas.ZIndexProperty, MAX_ZINDEX);
lastOpacity = uiElement.Opacity;
uiElement.Opacity = CURRENT_OPACITY;
IsDragging = true;
curPoint = new Point(e.GetPosition(null).X, e.GetPosition(null).Y);
}
}
private static void sender_MouseMove(object sender, MouseEventArgs e)
{
if (!IsDragging)
{
return;
}
UIElement uiElement = sender as UIElement;
if (uiElement != null)
{
double currentLeft = (double)uiElement.GetValue(Canvas.LeftProperty);
double currentTop = (double)uiElement.GetValue(Canvas.TopProperty);
double newLeft = (double)currentLeft + e.GetPosition(null).X - curPoint.X;
double newTop = (double)currentTop + e.GetPosition(null).Y - curPoint.Y;
uiElement.SetValue(Canvas.LeftProperty, newLeft);
uiElement.SetValue(Canvas.TopProperty, newTop);
curPoint = new Point(e.GetPosition(null).X, e.GetPosition(null).Y);
}
}
private static void sender_MouseLeftButtonUp(object sender, MouseButtonEventArgs e)
{
UIElement uiElement = sender as UIElement;
if (uiElement != null)
{
uiElement.ReleaseMouseCapture();
IsDragging = false;
uiElement.SetValue(Canvas.ZIndexProperty, lastZIndex);
uiElement.Opacity = lastOpacity;
}
}
public static void Load(UIElement sender)
{
sender.MouseLeftButtonDown += new MouseButtonEventHandler(sender_MouseLeftButtonDown);
sender.MouseLeftButtonUp += new MouseButtonEventHandler(sender_MouseLeftButtonUp);
sender.MouseMove += new MouseEventHandler(sender_MouseMove);
}
public static void UnLoad(UIElement sender)
{
sender.MouseLeftButtonDown -= new MouseButtonEventHandler(sender_MouseLeftButtonDown);
sender.MouseLeftButtonUp -= new MouseButtonEventHandler(sender_MouseLeftButtonUp);
sender.MouseMove -= new MouseEventHandler(sender_MouseMove);
}
}
DragDrop工具类的使用方法:DragDrop.Load(LayoutRoot);
分享到:
相关推荐
### WinForm控件拖拽类知识点详解 #### 一、概述 在Windows Forms(简称WinForms)应用程序开发中,有时我们需要实现自定义窗口或控件的行为,比如通过某个控件来拖动整个窗体。这种功能可以使得界面更加灵活且...
本实例主要探讨如何利用ObjectARX自定义一个拖动类,以供学习参考。 首先,我们需要理解ObjectARX中的“拖动类”指的是什么。在AutoCAD中,用户经常需要移动图形对象,这就是所谓的“拖动”。自定义拖动类通常涉及...
在给定的压缩包文件中,我们关注的是一个与C++编程相关的拖动类,它扩展了CRectTrack的功能,并且能够对直线以及CObject类型的对象进行拖动操作。这个功能通常在图形用户界面(GUI)开发中非常有用,特别是对于需要...
描述提到的"拖动类"可能是对CRectTrack类的一个扩展或改进,目的是不仅能够处理矩形的拖动,还增加了对直线和普通CObject对象的拖动支持。CObject是MFC中最基础的类,它是所有MFC类的基类,包含了一些基本的成员函数...
本实例将详细讲解JavaScript中的拖动类及其应用,帮助你理解和实现自己的拖放功能。 首先,我们要了解HTML5引入的拖放API,这是实现拖放功能的基础。HTML5的拖放API提供了一系列事件和接口,使得在浏览器中创建拖放...
JavaScript 自由拖拽类是一种常见的前端交互功能,用于实现元素在网页上的拖放操作,它大大增强了用户体验。在这个实例中,我们关注的是一个名为 "dragdrop_0.5" 的版本,它包含两个文件:`dragdrop_0.5.html` 和 `...
在本文中,我们将深入探讨如何使用C#语言创建一个基于拖动类的拼图游戏。这类游戏通常涉及图片的分割、移动以及选择等操作,旨在提供一种有趣且富有挑战性的娱乐方式,同时锻炼用户的逻辑思维和空间理解能力。 首先...
本文将详细解析如何封装一个基于JavaScript的拖拽类,以实现包括旋转、缩放和平移在内的多项功能。 首先,我们需要了解封装的意义。封装是面向对象编程的一个核心概念,它能将复杂的实现细节隐藏起来,只对外提供...
标题中的"自己写的拖动类.zip_autocad"暗示了这是一个关于自定义拖动类的代码包,适用于AutoCAD环境。这个压缩包包含三个文件:`MyJig.cpp`、`MyJig.h`以及`www.pudn.com.txt`。`MyJig.cpp`和`MyJig.h`是实现拖动...
在这个实例中,我们讨论的是如何派生一个名为AcEdJig的类来实现一条直线的拖动功能。 AcEdJig是AutoCAD中的一个类,它是用户交互界面(UI)的工具,主要用于引导用户进行图形输入。Jig在CAD编程中通常用来提供一种...
"JavaScript+CSS层拖动类示例"提供了一个实用的解决方案,它允许用户通过鼠标轻松地移动页面上的元素,例如窗口、图片或者文本框。这个实例包含三个不同的例子,分别演示了图片窗口、纯文本以及图文混合的拖动效果。...
away3D引擎物体鼠标拖动类,拖动3D物体
当你在“外观”->“菜单”中创建或选择一个菜单后,你可以看到每个菜单项都有一个可拖动的手柄,这使得你可以通过简单的拖放操作调整菜单项的顺序,甚至可以将菜单项移动到不同的菜单层级,形成子菜单。 为了实现更...
鼠标拖动产品 把产品快速分类,试用于各种功能
实现类似游戏武侠风云中背包物品的拖动,基于as的库进行编写,没有使用DragManager,DragManager的特效太多,没有研究怎样去除。 本例中做到了两个面板中各自物品的拖动及互相拖动,比较实用。 以前总是基于...
3. **实现Jig类**:创建一个自定义的Jig类,该类负责处理拖动过程中的逻辑,如计算新的位置、大小或角度。 4. **响应输入事件**:当用户在Jig上拖动时,需要捕获并处理鼠标和键盘事件。这可能涉及跟踪鼠标位置,...
对窗口中的任意控件进行拖动和缩放封装类
实现功能:传入路径,返回base64图片编码(原图抠图及滑块图)、图片坐标值、唯一id; 使用方法:1、将jar包导入... 2、调用工具类 ImageVo imageVo = GraphicCodeUtil.generate("E:\\data\\3322.jpg",width,height);
这个公用拖拽类代码主要是为了实现一个通用的、兼容各种浏览器的拖拽功能,包括对旧版IE浏览器的支持。下面我们将详细讲解这个拖拽类的实现原理和关键知识点。 首先,代码中通过`!!window.__defineGetter__`和`!/...
### JavaScript之DIV拖动类详解 #### 一、概述 本文档主要介绍了一种JavaScript实现的DIV拖动类,该类特别强调了在Firefox(FF)浏览器下的兼容性与简单的调用方式。拖动功能是网页交互设计中的一个重要组成部分,...