Silverlight开发历程—(输入事件和非输入事件)
Silverlight事件主要分为输入事件和非你输入事件两个种类。
输入事件主要指鼠标、键盘等你输入设备的事件;非输入事件指对象生存期的改变以及状态的改变等。我们这篇文章主要讲输入事件,至于事件的功能这里不再描述,主要是通过一个综合的例子来体验事件.
做一个可以用鼠标在指定区域内随意拖放的圆,在拖放过程中用到MouseMove、MouseLeftButtonDown、MouseLeftButtonUp这三个事件在移动鼠标的过程中,实时的来获取鼠标的坐标,然后更新圆的Canvas.Top和Canvas.Left
XAML:
<Canvas x:Name="LayoutRoot" Background="AliceBlue"><Ellipse Canvas.Top="50" Canvas.Left="50" Width="100" Height="100" Fill="Gold" Stroke="Black" StrokeThickness="3" MouseLeftButtonDown="Ellipse_MouseLeftButtonDown" MouseMove="Ellipse_MouseMove" MouseLeftButtonUp="Ellipse_MouseLeftButtonUp"/><TextBlock x:Name="txb_postion" FontSize="26" /></Canvas>
C#:
Point CurrPostion;//定义当前坐标bool MouseMoveing = false;//定义是否移动中的布尔变量public MouseEvent(){InitializeComponent();}private void Ellipse_MouseLeftButtonDown(object sender, MouseButtonEventArgs e){FrameworkElement element = sender as FrameworkElement;//获取当前坐标CurrPostion = e.GetPosition(null);//设置开始拖动变量MouseMoveing = true;if (element != null){//捕捉鼠标位置element.CaptureMouse();//设置鼠标的指针为手形element.Cursor = Cursors.Hand;}}private void Ellipse_MouseMove(object sender, MouseEventArgs e){//获取当前的Silverlight对象FrameworkElement element = sender as FrameworkElement;if (MouseMoveing){//获取当前坐标double CurrX = e.GetPosition(null).X - CurrPostion.X;double CurrY = e.GetPosition(null).Y - CurrPostion.Y;//设置对象的坐标element.SetValue(Canvas.LeftProperty, CurrX + (double)element.GetValue(Canvas.LeftProperty));element.SetValue(Canvas.TopProperty, CurrY + (double)element.GetValue(Canvas.TopProperty));//输出当前坐标txb_postion.Text = "Ellipse的当前坐标,X:" + CurrPostion.X.ToString() + ",Y:" + CurrPostion.Y.ToString();//保存当前坐标CurrPostion = e.GetPosition(null);}}private void Ellipse_MouseLeftButtonUp(object sender, MouseButtonEventArgs e){FrameworkElement element = sender as FrameworkElement;//放开鼠标后释放拖动变量的值MouseMoveing = false;//停止捕捉鼠标位置element.ReleaseMouseCapture();//设置当前坐标CurrPostion.X = 0;CurrPostion.Y = 0;//恢复原来鼠标的指针element.Cursor = null;}
然后运行结果,可以随意拖动圆,不过不太完整当鼠标把圆拖到浏览器边缘以外看不到时,就拖不回来了。有兴趣的朋友可以再完善一下:
例子很简单,主要是为了体验Silverlight的输入事件。
Silverlight开发历程—(输入事件和非输入事件)相关推荐
- 小程序的冒泡事件和非冒泡事件
事件分为冒泡事件和非冒泡事件: 冒泡事件:当一个组件上的事件被触发后,该事件会向父节点传递. 非冒泡事件:当一个组件上的事件被触发后,该事件不会向父节点传递. WXML的冒泡事件列表: 类型 触发条件 ...
- 【微信小程序】冒泡事件与非冒泡事件、将文章数据从业务中分离、wxml的模块化
- vue中解决模糊搜索输入中文时--未输入完成时触发input事件
在给输入框绑定input或keydown事件时 预期效果是有输入法时,输入中文后触发事件,不希望输一个字母就触发一次事件 可以用到compositionstart,compositionend. 主流 ...
- java keydown_利用Keydown事件阻止用户输入实现代码
利用Keydown事件阻止用户输入实现代码 更新时间:2014年03月11日 16:38:29 作者: 这篇文章主要介绍了利用Keydown事件阻止用户输入的具体实现,需要的朋友可以参考下 先了解 ...
- ABAP:参数输入屏幕SELECTION-SCREEN中的事件
在SAP开发中,有用户提出,在输入参数的屏幕中,根据用户的选择对某些输入框进行屏蔽,防止用户在不需要的地方输入参数.这需要用到SELECTION-SCREEN的事件. 下面的选择屏幕中,要求根据用户选 ...
- 使用AT SELECTION-SCREEN事件验证用户输入条件的反思
回想一下,为什么要在AT SELECTION-SCREEN事件验证用户输入条件?好像是第一次做ABAP培训中老师提到的,当时也没有觉得有什么问题,以后在程序中也就按照这样的思路去写代码了.像下面简单的 ...
- input文本框实现输入英文时自动触发事件,输入中文时要输入完成后才触发事件
需求: 英文(英文输入法): 每输入一个字母都触发一次事件; 中文(拼音输入法): 输入完成后才触发事件,不是每打一个拼音就触发 实现: $(function(){var flag = true;$( ...
- WPF经典教程--键盘输入事件, 鼠标输入事件, 焦点处理
一.键盘和键盘事件 WPF提供了一个基本的键盘类(System.Input.Keyboard类),该类提供键盘相关的事件,方法和属性,以提供有关键盘状态的信息.键盘事件也由诸如UIElement XA ...
- JavaScript表单事件 获取焦点:focus 失去焦点:blur 输入事件:input 变化事件:change
JavaScript表单事件 焦点处理 焦点处理主要包括focus(获取焦点)和blur(失去焦点)事件类型.所谓焦点,就是激活表单字段,使其可以响应键盘事件. 获取焦点:focus 当单击或使用Ta ...
最新文章
- All about OpenGL ES 2.x – (part 2/3)(转载)
- ansible相关说明
- org.apache.hadoop.util.PlatformName //cgywin下Hadoop-0.21.0 错误问题
- SSH整合中,使用父action重构子类action类.(在父类中获取子类中的泛型对象)
- LeetCode 437. 路径总和 III(双重递归)
- oracle logfile sync,oracle等待事件3构造一个DirectPathwrite等待事件和构造一个LogFileSync等待事件...
- python入门教授_南开大学教授强力推荐的5本Python入门书籍,附电子版
- HDU1871 无题【序列处理】
- 01.第一个html文件.html
- 关于IE插件开发(一)——COM组件开发加法
- 数字转人民币大写,PHP实现
- 从Outlook到python都可以使您的工作减少一半
- .net基础知识学习
- 研究了一堆英语学习软件,发现了一个美国宝藏口语App,国内也能用!
- 【问答】用SVG矢量图形自定义不规则控件——中国地图
- a链接实现alt提示
- 电子签名合同的有效期是多久
- stp实验心得_实验报告STP
- vue实现中根据字母或者中文进行排序
- 【STM32F429的DSP教程】第3章 Matlab简易使用之基础操作