11.Silverlight中为自定义控件添加鼠标双击属性,Silverlight模拟鼠标双击

2016-08-20 11:10:35来源:http://chengxingliang.blog.51cto.com/3972944/821476作者:程兴亮人点击


Silverlight中是没有鼠标左键双击事件的。在实际项目中,我们只能够模拟鼠标双击事件。其原理如下:控件接受到第一次单击事件,此时开始设置一 个计时器,在计时器的时间范围内收到第二次点击事件,那么执行双击事件应该执行的程序段。如果计时器在规定的时间范围内并未接收到第二次点击事件,那么执 行单击事件。


一般情况下,windows默认的鼠标双击间隔在200毫秒以内,所以在程序中我们设置超时时间为200毫秒。


首先我们贴出鼠标双击类的所有源代码,此代码是在网上查找到的,进行了一部分的修改。类的注释在源码中已经写明:



usingSystem;usingSystem.Threading;usingSystem.Windows;usingSystem.Windows.Input;usingSystem.Windows.Threading;namespaceSLDoubleClick{publicdelegatevoidMouseLeftDoubleDownEventHandler(objectsender,MouseButtonEventArgse);///<summary>///定义了双击事件的类///</summary>publicclassDoubleClick{///<summary>///双击事件定时器///</summary>privateDispatcherTimerdoubleClickTimer;///<summary>///是否单击///</summary>privateboolisOnceClick;///<summary>///双击事件///</summary>publicMouseLeftDoubleDownEventHandlermouseLeftDoubleDown;///<summary>///拥有双击事件的UI///</summary>privateUIElementowner;///<summary>///实例化DoubleClick///</summary>///<paramname="owner">具有双击事件的UI</param>publicDoubleClick(UIElementowner){this.owner=owner;this.bindEvent();}///<summary>///绑定事件///</summary>privatevoidbindEvent(){//初始化时设置控件左键单击时触发的鼠标点击事件this.owner.MouseLeftButtonDown+=(newMouseButtonEventHandler(this.owner_MouseLeftButtonDown));DispatcherTimertimer=newDispatcherTimer();//设置单击事件时间间隔timer.Interval=(newTimeSpan(0,0,0,0,200));this.doubleClickTimer=timer;//初始化时设置在200毫秒之内部调用此事件,如果超过200毫秒还没有得到第二次点击,则调用此事件this.doubleClickTimer.Tick+=(newEventHandler(this.doubleClickTimer_Tick));}///<summary>///此事件在超过200毫秒未接收到第二次点击时触发。确定本次是单击事件。///</summary>///<paramname="sender"></param>///<paramname="e"></param>privatevoiddoubleClickTimer_Tick(objectsender,EventArgse){this.isOnceClick=false;this.doubleClickTimer.Stop();}privatevoidowner_MouseLeftButtonDown(objectsender,MouseButtonEventArgse){if(!this.isOnceClick){//点击第一次之后开始计时,并且设置此时为单击一次this.isOnceClick=true;this.doubleClickTimer.Start();}else{//在200毫秒的时间间隔之内并且触发doubleClickTimer_Tick事件。则执行鼠标左键双击事件。this.mouseLeftDoubleDown(sender,e);}}}

上面一段源代码在项目中,可以直接拷贝创建不用修改它,也可以不必看它的运行原理。我们右键点击项目名称,然后“添加”-->“新建项”,新建一个名为Uc.xaml自定义控件类,Uc.xaml.cs代码如下:



privateDoubleClickMouseDoubleClick;privateboolisDoubleClick;///<summary>///是否允许双击///</summary>publicboolIsDoubleClick{get{returnisDoubleClick;}set{isDoubleClick=value;if(isDoubleClick==true){MouseDoubleClick=newDoubleClick(this);this.MouseDoubleClick.mouseLeftDoubleDown+=newMouseLeftDoubleDownEventHandler(full_mouseLeftDoubleDown);this.Cursor=Cursors.Hand;}else{}}}privatevoidfull_mouseLeftDoubleDown(objectsender,MouseButtonEventArgse){MessageBox.Show("你双击了此矩形框");}

在自定义控件中自定义一个属性,然后设置属性为Ture是实例化DoubleClick类,为此类的mouseLeftDoubleDown事件加载事件 方法,在此方法中实现需要进行的双击操作。最后我们在MainPage.xaml.cs代码中编写以下代码即可创建可设置是否允许双击的自定义控件。


Ucuc=newUc();uc.IsDoubleClick=true;this.LayoutRoot.Children.Add(uc);

本实例采用VS2010+Silverlight 4.0编写 如需要源码点击 http://files.cnblogs.com/chengxingliang/SLDoubleClick.rar下载。


最新文章

123

最新摄影

微信扫一扫

第七城市微信公众平台