Silverlight拖动,需要Canvas。

Canvas管网定义:

定义一个区域,在该区域中可以使用相对于该区域的坐标显式定位子元素。

<Canvas   ...>
oneOrMoreUIElements
</Canvas>
-or-
<Canvas .../>
 

描述

oneOrMoreUIElements

UIElement 对象派生的以下对象元素中的一个或多个:Border (Silverlight 2)、CanvasEllipseGlyphsGrid (Silverlight 2)、ImageInkPresenterLineMediaElementPasswordBox (Silverlight 2)、PathPolygonPolylineRectangleShapeStackPanel (Silverlight 2)、TextBlockTextBox (Silverlight 2)。 当脚本在运行时访问 Children 属性时,此处定义的对象元素将成为 Children 集合的成员。

Canvas作用:

在 Silverlight 的 JavaScript API 中,Canvas 对象通常为 XAML 的根元素,此 XAML 为 Silverlight 插件的 Source 属性。

Canvas 可以包含子元素,这些子元素呈现在 Canvas 区域中。 每个子元素都必须为一个 UIElement。 在 XAML 中,将子元素声明为充当 Canvas 对象元素的内部 XML 的对象元素。

在脚本中,可以通过获取由 Children 属性访问的集合来操作 Canvas 子对象的集合。

由于 Canvas 为 UIElement 类型,因此可以嵌套 Canvas 元素。

很多情况下,Canvas 仅仅用作其他对象的容器,而没有任何可见属性。 如果满足下面的一个或多个条件,Canvas 即不可见:

  • Height 属性等于 0。

  • Width 属性等于 0。

  • Background 属性等于 null。

  • Opacity 属性等于 0。

  • Visibility 属性等于 Collapsed。

  • Canvas 的某个上级对象不可见。

在 Silverlight 的 JavaScript API 中,键盘事件仅对根元素或可设定焦点的控件(TextBoxPasswordBox)可用。 Canvas 是一个典型的根元素,所以通常是具有键事件处理的公共对象。

学习实现一个拖动对象效果:

我们在xaml文件中的根元素放置一个Canvas,在Canvas的子元素中放置一个Rectangle

要想实现拖动,我们需要做的事情有:

  • 1,当鼠标在该对象上边按下时,获取到该元素,并标记鼠标已经按下;
  • 2,当已经标记为按下,且还未释放鼠标之前,有任何拖动我们都要把选中的对象的位置坐变动;
  • 3,当鼠标释放,当鼠标释放的时候,我们需要把标记鼠标已按下的标记取消,同时释放鼠标。

从上边的分析知道,我们需要一些赋值的标记,和鼠标位置跟踪标记元素

鼠标按下事件:

鼠标移动事件:

鼠标释放事件:

Canvas中鼠标获取元素并拖动技术的更多相关文章

  1. 在canvas中使用html元素

    让div悬浮于canvas之上   使用z-index控制层及顺序 慕课网canvas demo <div id="canvas-wrapper"> <canva ...

  2. 点击鼠标获取元素ID

    原文:点击鼠标获取元素ID public partial class Form1 : Form { public Form1() { InitializeComponent(); } private ...

  3. html中如何获取元素在文档中的位置

    html中如何获取元素在文档中的位置 一.总结 一句话总结: $("#elem").offset().top $("#elem").offset().left ...

  4. JavaScript中的获取元素的方法

    通过id获取元素 document.getElementById(id名字) 通过标签获取元素 document/元素.getElementsByTagName(标签名) 通过css选择器获取元素 d ...

  5. 多级iframe中,获取元素相对于浏览器左上角的坐标(非当前frame)

    搜索了好多文章,都不是自己想要的,所以在此贴下自己的解决方案,做个笔记. 1.常规需求:获取当前元素距离左边.顶部的距离 1 var x = $(div).offset().left; 2 var y ...

  6. 使用python处理selenium中的获取元素属性问题

    # 获取我的订单元素class属性值 at = self.driver.find_element_by_link_text('我的订单').get_attribute('class') # 判断cla ...

  7. vue2.0中怎么获取元素

    在元素上添加 v-el:food-wrapper (不用驼峰的写法) vue1版本 报错: vue2版本 (vue2把vue1中的 v-el 改为了 ref vue1 v-el:foods-wrapp ...

  8. 使用python处理selenium中的获取元素属性

    # 获取我的订单元素class属性值 get_class_name = driver.find_element_by_link_text('我的订单').get_attribute('class') ...

  9. Qwt中鼠标获取坐标点

    void getPoint(QwtPlot *plot) { QPoint point = plot->canvas()->mapFromGlobal(QCursor::pos()); Q ...

随机推荐

  1. 【IOS笔记】View Controller Basics

    View Controller Basics   视图控制器基础 Apps running on iOS–based devices have a limited amount of screen s ...

  2. Java的访问控制

       类内部  本包(实例.类变量和方法)  子类(任何位置) 外部包(实例.类变量和方法) public    √  √  √  √ protected   √  √  √  × default  ...

  3. endsWith和startsWith同样效果其他形式的写法(2016.1.12)

    //判断以什么开始startWith str = "abcdef"; //用其他的形式写的startsWith if(str.indexOf("abc")==0 ...

  4. 使用 Vagrant 打造跨平台开发环境

    Vagrant 是一款用来构建虚拟开发环境的工具,非常适合 php/python/ruby/java 这类语言开发 web 应用,“代码在我机子上运行没有问题”这种说辞将成为历史. 我们可以通过 Va ...

  5. C#数组的排序

    对于数组的排序有好多种方法,上面这种是最常规的方法,当然在Array类中有两个方法就是专门来完成排序的,一会我们再来看这两方法,下面我们还是来看一下语法吧,只要搞懂语法了,就可以自己随便排序了. 冒泡 ...

  6. HLA高级汇编语言基础

    HLA高级汇编语言环境的搭建与设置 我的操作系统:WINDOWS7 需要下载的东西:MASM32:http://www.masm32.com/masmdl.htm  HLA:http://webste ...

  7. java ObjectOutputStream

    import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; import ...

  8. 通过驱动向打印机发送一段(ESC)控制指令

    这个功能看起来挺奇葩的, 写这个是因为有客户在使用驱动连接票据打印机, 但是又要开钱箱, 驱动里只能每张单据都开钱箱, 而这个打印机又不是只打印结帐单 所以就需要用软件控制打印机开钱箱 票据打印机一般 ...

  9. Scrum 的相关概念

    Scrum 的相关概念 4.1   Scrum 的起源 Scrum 是一种灵活的敏捷软件开发管理过程,这个名词来源于英式橄榄球.Scrum方法由Ken Schwaber和Jeff Sutherland ...

  10. 20145211 《Java程序设计》实验报告五————Java网络编程及安全实验报告

    实验内容 1.掌握Socket程序的编写: 掌握密码技术的使用: 设计安全传输系统. 实验步骤 这一部分是与我的partner合作的,详见他的博客- [20145326 <Java程序设计> ...