`
wyf
  • 浏览: 438753 次
  • 性别: Icon_minigender_1
  • 来自: 唐山
社区版块
存档分类
最新评论

拖动类

 
阅读更多
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控件拖拽类

    ### WinForm控件拖拽类知识点详解 #### 一、概述 在Windows Forms(简称WinForms)应用程序开发中,有时我们需要实现自定义窗口或控件的行为,比如通过某个控件来拖动整个窗体。这种功能可以使得界面更加灵活且...

    objectArx自定义拖动类简单例子

    本实例主要探讨如何利用ObjectARX自定义一个拖动类,以供学习参考。 首先,我们需要理解ObjectARX中的“拖动类”指的是什么。在AutoCAD中,用户经常需要移动图形对象,这就是所谓的“拖动”。自定义拖动类通常涉及...

    可以实现 CRectTrack 类功能的拖动类,可以移动拖动直线,可拖动普通 CObject 对象.zip

    在给定的压缩包文件中,我们关注的是一个与C++编程相关的拖动类,它扩展了CRectTrack的功能,并且能够对直线以及CObject类型的对象进行拖动操作。这个功能通常在图形用户界面(GUI)开发中非常有用,特别是对于需要...

    可以实现 CRectTrack 类功能的拖动类,可以移动拖动直线,可拖动普通 CObject 对象.rar

    描述提到的"拖动类"可能是对CRectTrack类的一个扩展或改进,目的是不仅能够处理矩形的拖动,还增加了对直线和普通CObject对象的拖动支持。CObject是MFC中最基础的类,它是所有MFC类的基类,包含了一些基本的成员函数...

    js拖动类及其实例

    本实例将详细讲解JavaScript中的拖动类及其应用,帮助你理解和实现自己的拖放功能。 首先,我们要了解HTML5引入的拖放API,这是实现拖放功能的基础。HTML5的拖放API提供了一系列事件和接口,使得在浏览器中创建拖放...

    Javascript自由拖拽类

    JavaScript 自由拖拽类是一种常见的前端交互功能,用于实现元素在网页上的拖放操作,它大大增强了用户体验。在这个实例中,我们关注的是一个名为 "dragdrop_0.5" 的版本,它包含两个文件:`dragdrop_0.5.html` 和 `...

    拼图游戏(拖动类)

    在本文中,我们将深入探讨如何使用C#语言创建一个基于拖动类的拼图游戏。这类游戏通常涉及图片的分割、移动以及选择等操作,旨在提供一种有趣且富有挑战性的娱乐方式,同时锻炼用户的逻辑思维和空间理解能力。 首先...

    基于javascript的拖拽类封装详解

    本文将详细解析如何封装一个基于JavaScript的拖拽类,以实现包括旋转、缩放和平移在内的多项功能。 首先,我们需要了解封装的意义。封装是面向对象编程的一个核心概念,它能将复杂的实现细节隐藏起来,只对外提供...

    自己写的拖动类.zip_autocad

    标题中的"自己写的拖动类.zip_autocad"暗示了这是一个关于自定义拖动类的代码包,适用于AutoCAD环境。这个压缩包包含三个文件:`MyJig.cpp`、`MyJig.h`以及`www.pudn.com.txt`。`MyJig.cpp`和`MyJig.h`是实现拖动...

    派生于AcEdJig的一条直线拖动类实例

    在这个实例中,我们讨论的是如何派生一个名为AcEdJig的类来实现一条直线的拖动功能。 AcEdJig是AutoCAD中的一个类,它是用户交互界面(UI)的工具,主要用于引导用户进行图形输入。Jig在CAD编程中通常用来提供一种...

    JavaScript+CSS层拖动类示例

    "JavaScript+CSS层拖动类示例"提供了一个实用的解决方案,它允许用户通过鼠标轻松地移动页面上的元素,例如窗口、图片或者文本框。这个实例包含三个不同的例子,分别演示了图片窗口、纯文本以及图文混合的拖动效果。...

    away3D引擎物体鼠标拖动类

    away3D引擎物体鼠标拖动类,拖动3D物体

    wordpress 拖拽式导航分类

    当你在“外观”->“菜单”中创建或选择一个菜单后,你可以看到每个菜单项都有一个可拖动的手柄,这使得你可以通过简单的拖放操作调整菜单项的顺序,甚至可以将菜单项移动到不同的菜单层级,形成子菜单。 为了实现更...

    JavaScript 鼠标拖动产品分类效果

    鼠标拖动产品 把产品快速分类,试用于各种功能

    as拖动,简单,实用,类似游戏中背包物品拖动

    实现类似游戏武侠风云中背包物品的拖动,基于as的库进行编写,没有使用DragManager,DragManager的特效太多,没有研究怎样去除。 本例中做到了两个面板中各自物品的拖动及互相拖动,比较实用。 以前总是基于...

    ObjectArx通过Jig拖动绘制自定义实体

    3. **实现Jig类**:创建一个自定义的Jig类,该类负责处理拖动过程中的逻辑,如计算新的位置、大小或角度。 4. **响应输入事件**:当用户在Jig上拖动时,需要捕获并处理鼠标和键盘事件。这可能涉及跟踪鼠标位置,...

    对任意控件进行拖动和缩放封装类

    对窗口中的任意控件进行拖动和缩放封装类

    java实现拖拉验证码工具类

    实现功能:传入路径,返回base64图片编码(原图抠图及滑块图)、图片坐标值、唯一id; 使用方法:1、将jar包导入... 2、调用工具类 ImageVo imageVo = GraphicCodeUtil.generate("E:\\data\\3322.jpg",width,height);

    javascript 公用拖拽类代码

    这个公用拖拽类代码主要是为了实现一个通用的、兼容各种浏览器的拖拽功能,包括对旧版IE浏览器的支持。下面我们将详细讲解这个拖拽类的实现原理和关键知识点。 首先,代码中通过`!!window.__defineGetter__`和`!/...

    javascript之DIV拖动类 支持在FF下拖动,调用简单

    ### JavaScript之DIV拖动类详解 #### 一、概述 本文档主要介绍了一种JavaScript实现的DIV拖动类,该类特别强调了在Firefox(FF)浏览器下的兼容性与简单的调用方式。拖动功能是网页交互设计中的一个重要组成部分,...

Global site tag (gtag.js) - Google Analytics