热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

一步一步学Silverlight2系列(4):鼠标事件处理_转载

概述Silverlight2Beta1版本发布了,无论从Runtime还是Tools都给我们带来了很多的惊喜,如支持框架语言VisualBasic,Vi

概述

Silverlight 2 Beta 1版本发布了,无论从Runtime还是Tools都给我们带来了很多的惊喜,如支持框架语言Visual Basic, Visual C#, IronRuby, Ironpython,对JSON、Web Service、WCF以及Sockets的支持等一系列新的特性。《一步一步学Silverlight 2系列》文章带您快速进入Silverlight 2开发。

本文为系列文章第四篇,学习Silverlight 2中的鼠标事件处理,支持的鼠标事件包括MouseMove 、MouseEnter 、MouseLeave 、MouseLeftButtonDown、MouseLeftButtonUp。

声明事件

对于鼠标事件我们可以附加到任何Silverlight对象上面,如下面的XAML声明,为两个圆形添加上MouseEnter和MouseLeave事件:

<Canvas Background&#61;"#46461F"><Ellipse Width&#61;"120" Height&#61;"120" Fill&#61;"Orange"Canvas.Top&#61;"60" Canvas.Left&#61;"80"MouseEnter&#61;"OnMouseEnter"MouseLeave&#61;"OnMouseLeave"/><Ellipse Width&#61;"120" Height&#61;"120" Fill&#61;"Orange"Canvas.Top&#61;"60" Canvas.Left&#61;"280"MouseEnter&#61;"OnMouseEnter"MouseLeave&#61;"OnMouseLeave"/>
Canvas>

编写事件处理程序&#xff0c;鼠标放上去时和鼠标移开时分别改变圆形的填充色&#xff1a;

void OnMouseEnter(object sender, MouseEventArgs e)
{Ellipse ell &#61; sender as Ellipse;ell.Fill &#61; new SolidColorBrush(Colors.Yellow);
}
void OnMouseLeave(object sender, MouseEventArgs e)
{Ellipse ell &#61; sender as Ellipse;ell.Fill &#61; new SolidColorBrush(Colors.Green);
}

运行后效果如下&#xff1a;

TerryLee_Silverlight2_0030

分别在两个圆形上放上鼠标并移开后如下所示&#xff1a;

TerryLee_Silverlight2_0031

使用代码管理事件

除了在XAML中声明事件外&#xff0c;也可以直接使用代码来注册事件&#xff0c;简单的修改一下上面的XAML文件&#xff0c;去掉事件的声明并为两个圆形分别加上Name&#xff1a;

<Canvas Background&#61;"#46461F"><Ellipse x:Name&#61;"ellipse1" Width&#61;"120" Height&#61;"120" Fill&#61;"Orange"Canvas.Top&#61;"60" Canvas.Left&#61;"80"/><Ellipse x:Name&#61;"ellipse2" Width&#61;"120" Height&#61;"120" Fill&#61;"Orange"Canvas.Top&#61;"60" Canvas.Left&#61;"280"/>
Canvas>

在代码中进行事件注册&#xff1a;

public partial class Page : UserControl
{public Page(){InitializeComponent();ellipse1.MouseEnter &#43;&#61; new MouseEventHandler(OnMouseEnter);ellipse1.MouseLeave &#43;&#61; new MouseEventHandler(OnMouseLeave);ellipse2.MouseEnter &#43;&#61; new MouseEventHandler(OnMouseEnter);ellipse2.MouseLeave &#43;&#61; new MouseEventHandler(OnMouseLeave);}void OnMouseEnter(object sender, MouseEventArgs e){Ellipse ell &#61; sender as Ellipse;ell.Fill &#61; new SolidColorBrush(Colors.Yellow);}void OnMouseLeave(object sender, MouseEventArgs e){Ellipse ell &#61; sender as Ellipse;ell.Fill &#61; new SolidColorBrush(Colors.Green);}
}

运行后可以看到跟上面一样的效果&#xff1a;

TerryLee_Silverlight2_0031

事件数据

所有的鼠标事件都使用MouseButtonEventArgs和MouseEventArgs作为事件数据&#xff0c;通过这两个参数可以获取相关事件数据&#xff0c;使用GetPosition方法或者Source、Handled属性。如下面的XAML声明&#xff1a;

<Canvas Background&#61;"#46461F"><Rectangle Fill&#61;"Orange" Stroke&#61;"White" StrokeThickness&#61;"2"Canvas.Top&#61;"40" Canvas.Left&#61;"130"Width&#61;"240" Height&#61;"120"MouseMove&#61;"Rectangle_MouseMove"/><TextBlock x:Name&#61;"Status" Foreground&#61;"White" Text&#61;"Status" Canvas.Left&#61;"100" Canvas.Top&#61;"200"/>
Canvas>

为矩形添加MouseMove事件处理&#xff0c;在鼠标移动时我们获取当前坐标位置&#xff0c;并显示出来&#xff1a;

private void Rectangle_MouseMove(object sender, MouseEventArgs e)
{Point p &#61; e.GetPosition(e.Source as FrameworkElement);Status.Text &#61; String.Format("坐标位置&#xff08;{0}:{1}&#xff09;",p.X,p.Y);
}

运行后在矩形中移动鼠标&#xff0c;效果如下&#xff1a;

TerryLee_Silverlight2_0032

路由事件

在Silverlight中&#xff0c;提供了事件路由&#xff0c;使得我们可以在父节点上接收和处理来自于子节点的事件&#xff0c;Silverlight中的路由事件采用了冒泡路由策略。在鼠标事件中MouseLeftButtonDown 、MouseLeftButtonUp 、MouseMove三个事件都支持路由事件&#xff0c;而MouseEnter、MouseLeave两个事件不支持。下面的XAML中我们为Canvas对象声明了一个MouseLeftButtonDown事件&#xff1a;

<Canvas x:Name&#61;"ParentCanvas" Background&#61;"#46461F" MouseLeftButtonDown&#61;"ParentCanvas_MouseLeftButtonDown"><Rectangle x:Name&#61;"RecA" Fill&#61;"Orange" Stroke&#61;"White" StrokeThickness&#61;"2"Canvas.Top&#61;"40" Canvas.Left&#61;"60"Width&#61;"160" Height&#61;"100"/><Rectangle x:Name&#61;"RecB" Fill&#61;"LightBlue" Stroke&#61;"White" StrokeThickness&#61;"2"Canvas.Top&#61;"40" Canvas.Left&#61;"240"Width&#61;"160" Height&#61;"100"/><TextBlock x:Name&#61;"Status" Foreground&#61;"White" Text&#61;"Status" Canvas.Left&#61;"100" Canvas.Top&#61;"200"/>
Canvas>

添加MouseLeftButtonDown事件处理程序&#xff0c;显示当前鼠标按下时的坐标&#xff0c;并显示源控件名称&#xff1a;

private void ParentCanvas_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
{String msg &#61; "x:y &#61; " &#43; e.GetPosition(sender as FrameworkElement).ToString();msg &#43;&#61; " from " &#43; (e.Source as FrameworkElement).Name;Status.Text &#61; msg;
}

运行后在RecA上按下鼠标&#xff1a;

TerryLee_Silverlight2_0033

在Canvas上按下鼠标&#xff1a;

TerryLee_Silverlight2_0034

结束语

本文简单介绍了Silverlight 2中关于鼠标事件处理的一些知识&#xff0c;包括事件注册、获取事件数据、路由事件等。在下一篇中&#xff0c;我们将使用这些鼠标事件来实现一个简单的拖放功能。

 

转载出处声明&#xff1a;

作者&#xff1a;TerryLee
出处&#xff1a;http://terrylee.cnblogs.com
原文链接&#xff1a;http://www.cnblogs.com/Terrylee/archive/2008/03/07/Silverlight2-step-by-step-part4-mouse-events-handle.html

 

转:https://www.cnblogs.com/ZhangHuaning/archive/2010/04/20/1715965.html



推荐阅读
  • Python 伦理黑客技术:深入探讨后门攻击(第三部分)
    在《Python 伦理黑客技术:深入探讨后门攻击(第三部分)》中,作者详细分析了后门攻击中的Socket问题。由于TCP协议基于流,难以确定消息批次的结束点,这给后门攻击的实现带来了挑战。为了解决这一问题,文章提出了一系列有效的技术方案,包括使用特定的分隔符和长度前缀,以确保数据包的准确传输和解析。这些方法不仅提高了攻击的隐蔽性和可靠性,还为安全研究人员提供了宝贵的参考。 ... [详细]
  • Java中不同类型的常量池(字符串常量池、Class常量池和运行时常量池)的对比与关联分析
    在研究Java虚拟机的过程中,笔者发现存在多种类型的常量池,包括字符串常量池、Class常量池和运行时常量池。通过查阅CSDN、博客园等相关资料,对这些常量池的特性、用途及其相互关系进行了详细探讨。本文将深入分析这三种常量池的差异与联系,帮助读者更好地理解Java虚拟机的内部机制。 ... [详细]
  • Python进阶笔记:深入理解装饰器、生成器与迭代器的应用
    本文深入探讨了Python中的装饰器、生成器和迭代器的应用。装饰器本质上是一个函数,用于在不修改原函数代码和调用方式的前提下为其添加额外功能。实现装饰器需要掌握闭包、高阶函数等基础知识。生成器通过 `yield` 语句提供了一种高效生成和处理大量数据的方法,而迭代器则是一种可以逐个访问集合中元素的对象。文章详细解析了这些概念的原理和实际应用案例,帮助读者更好地理解和使用这些高级特性。 ... [详细]
  • 技术日志:使用 Ruby 爬虫抓取拉勾网职位数据并生成词云分析报告
    技术日志:使用 Ruby 爬虫抓取拉勾网职位数据并生成词云分析报告 ... [详细]
  • 本文探讨了 Java 中 Pair 类的历史与现状。虽然 Java 标准库中没有内置的 Pair 类,但社区和第三方库提供了多种实现方式,如 Apache Commons 的 Pair 类和 JavaFX 的 javafx.util.Pair 类。这些实现为需要处理成对数据的开发者提供了便利。此外,文章还讨论了为何标准库未包含 Pair 类的原因,以及在现代 Java 开发中使用 Pair 类的最佳实践。 ... [详细]
  • 本文探讨了如何通过检测浏览器类型来动态加载特定的npm包,从而优化前端性能。具体而言,仅在用户使用Edge浏览器时加载相关包,以提升页面加载速度和整体用户体验。此外,文章还介绍了实现这一目标的技术细节和最佳实践,包括使用User-Agent字符串进行浏览器识别、条件加载策略以及性能监控方法。 ... [详细]
  • 字节码开发笔记:深入解析与应用技巧 ... [详细]
  • RxJava 中 Observable.singleElement() 方法详解与实例代码分析 ... [详细]
  • 本文详细探讨了OpenCV中人脸检测算法的实现原理与代码结构。通过分析核心函数和关键步骤,揭示了OpenCV如何高效地进行人脸检测。文章不仅提供了代码示例,还深入解释了算法背后的数学模型和优化技巧,为开发者提供了全面的理解和实用的参考。 ... [详细]
  • 如何使用 net.sf.extjwnl.data.Word 类及其代码示例详解 ... [详细]
  • 我正在使用 Ruby on Rails 构建个人网站。总体而言,RoR 是一个非常出色的工具,它提供了丰富的功能和灵活性,使得创建自定义页面变得既高效又便捷。通过利用其强大的框架和模块化设计,我可以轻松实现复杂的功能,同时保持代码的整洁和可维护性。此外,Rails 的社区支持也非常强大,为开发过程中遇到的问题提供了丰富的资源和解决方案。 ... [详细]
  • Python 程序转换为 EXE 文件:详细解析 .py 脚本打包成独立可执行文件的方法与技巧
    在开发了几个简单的爬虫 Python 程序后,我决定将其封装成独立的可执行文件以便于分发和使用。为了实现这一目标,首先需要解决的是如何将 Python 脚本转换为 EXE 文件。在这个过程中,我选择了 Qt 作为 GUI 框架,因为之前对此并不熟悉,希望通过这个项目进一步学习和掌握 Qt 的基本用法。本文将详细介绍从 .py 脚本到 EXE 文件的整个过程,包括所需工具、具体步骤以及常见问题的解决方案。 ... [详细]
  • 本文详细探讨了Oracle数据库中Number和Float数据类型的特性和使用方法。通过对比分析,解释了Number类型在精度和范围上的优势,以及Float类型在处理科学计算时的灵活性。文章还介绍了Number数据类型的语法结构及其在实际应用中的最佳实践,帮助读者更好地理解和选择合适的数据类型以满足不同的业务需求。 ... [详细]
  • 本文深入解析了 jQuery 中用于扩展功能的三个关键方法:`$.extend()`、`$.fn` 和 `$.fn.extend()`。其中,`$.extend()` 用于扩展 jQuery 对象本身,而 `$.fn.extend()` 则用于扩展 jQuery 的原型对象,使自定义方法能够作为 jQuery 实例的方法使用。通过这些方法,开发者可以轻松地创建和集成自定义插件,增强 jQuery 的功能。文章详细介绍了每个方法的用法、参数及实际应用场景,帮助读者更好地理解和运用这些强大的工具。 ... [详细]
  • Python全局解释器锁(GIL)机制详解
    在Python中,线程是操作系统级别的原生线程。为了确保多线程环境下的内存安全,Python虚拟机引入了全局解释器锁(Global Interpreter Lock,简称GIL)。GIL是一种互斥锁,用于保护对解释器状态的访问,防止多个线程同时执行字节码。尽管GIL有助于简化内存管理,但它也限制了多核处理器上多线程程序的并行性能。本文将深入探讨GIL的工作原理及其对Python多线程编程的影响。 ... [详细]
author-avatar
尤天asoka
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有