My Silverlight系列(11)—— Silverlight中的右键事件点击模拟(全局版本)
2009-02-18 10:19
337 查看
众所周知,Silverlight默认并不支持右键点击和滚轮操作。微软曾经在它的DeepZoom解决方案中给出了一套对于滚轮操作的支持方案(包括一个Helper类,其实中含有NestedType,还有一个EventArgs类),但是至今仍然没有比较正式的对于右键的支持,所以我依照微软的思路,做了对于右键支持的通用类,希望能够对大家有所帮助。今天要介绍的,是这个通用方法的全局侦测的版本,即无论用户点击Application内的哪个元素,都全触发事件,至于是否处理,则交给程序员判断。还有一个为特定UI元素监视右键点击的模式,我会在下一篇中介绍。无疑下一个版本将更加面向对象,但是我认为这个版本也是有一定价值的。
首先,在HostPage中设置Silverlight对象的WindowLess属性为true,在asp.net中:
<asp:Silverlight ID="Xaml1" Windowless="true" runat="server" Windowless="true" Source="~/ClientBin/MyApp.xap" MinimumVersion="2.0.31005.0" Width="100%" Height="100%" />
在Html中:
public static class GlobalTransform
2public sealed class MouseRightClickEventArgs : EventArgs
2public sealed class RightClickHelper:IDisposable
2 {
3 public event EventHandler<MouseRightClickEventArgs> RightClick;
4 public RightClickHelper()
5 {
6 //if (!(Application.Current.Host.Settings.Windowless && HtmlPage.IsEnabled))
7 //throw new NotSupportedException("Must set the Windowless of the plug-in as true");
8 HtmlPage.Document.AttachEvent("oncontextmenu", this.OnContextMenu);
9 }
10
11 private void OnContextMenu(object sender, HtmlEventArgs e)
12 {
13 if (RightClick != null)
14 {
15 MouseRightClickEventArgs evtArgs = new MouseRightClickEventArgs(e.OffsetX, e.OffsetY);
16 RightClick(this, evtArgs);
17 if (evtArgs.Handled)
18 e.PreventDefault();
19 }
20 }
21
22 IDisposable Members#region IDisposable Members
23 public void Dispose()
24 {
25 HtmlPage.Document.DetachEvent("oncontextmenu", this.OnContextMenu);
26 }
27 #endregion
28 }
这样,创建一个RightClickHelper的对象,它将侦测全局的右键点击事件,然后将它们提交给程序员,程序员可调用RightClickEventArgs中的方法进行命中测试,并且判断这次点击是否受理。上面提到的为特点的UI元素加入右键点击的帮助类,只是将EventArgs中的相应方法封装进去,在类内部做出判断后再提交给程序员。这种更加面向对象的方式,我将会在下一篇文章中给出。
首先,在HostPage中设置Silverlight对象的WindowLess属性为true,在asp.net中:
<asp:Silverlight ID="Xaml1" Windowless="true" runat="server" Windowless="true" Source="~/ClientBin/MyApp.xap" MinimumVersion="2.0.31005.0" Width="100%" Height="100%" />
在Html中:
public static class GlobalTransform
2public sealed class MouseRightClickEventArgs : EventArgs
2public sealed class RightClickHelper:IDisposable
2 {
3 public event EventHandler<MouseRightClickEventArgs> RightClick;
4 public RightClickHelper()
5 {
6 //if (!(Application.Current.Host.Settings.Windowless && HtmlPage.IsEnabled))
7 //throw new NotSupportedException("Must set the Windowless of the plug-in as true");
8 HtmlPage.Document.AttachEvent("oncontextmenu", this.OnContextMenu);
9 }
10
11 private void OnContextMenu(object sender, HtmlEventArgs e)
12 {
13 if (RightClick != null)
14 {
15 MouseRightClickEventArgs evtArgs = new MouseRightClickEventArgs(e.OffsetX, e.OffsetY);
16 RightClick(this, evtArgs);
17 if (evtArgs.Handled)
18 e.PreventDefault();
19 }
20 }
21
22 IDisposable Members#region IDisposable Members
23 public void Dispose()
24 {
25 HtmlPage.Document.DetachEvent("oncontextmenu", this.OnContextMenu);
26 }
27 #endregion
28 }
这样,创建一个RightClickHelper的对象,它将侦测全局的右键点击事件,然后将它们提交给程序员,程序员可调用RightClickEventArgs中的方法进行命中测试,并且判断这次点击是否受理。上面提到的为特点的UI元素加入右键点击的帮助类,只是将EventArgs中的相应方法封装进去,在类内部做出判断后再提交给程序员。这种更加面向对象的方式,我将会在下一篇文章中给出。
相关文章推荐
- Silverlight 4以下版本模拟鼠标双击事件
- Android 跨进程事件处理(一)——模拟点击、全局截屏
- 如何捕捉Silverlight右键点击事件
- 如何捕捉Silverlight右键点击事件
- Android 跨进程事件处理(一)——模拟点击、全局截屏
- Silverlight实用窍门系列:8. Accordion模拟菜单,Accordion动态绑定数据,模拟菜单点击【附带源码实例】
- Silverlight实用窍门系列:15.Visifire图表控件的使用二(DataPoint点击事件和Legend文字标注栏的点击事件)【附带源码实例】
- 在事件触发的时候,有时我们需要一些模拟用户行为的操作。例如:当网页加载完毕后 自行点击一个按钮触发一个事件,而不是用户去点击。
- JS右键点击事件
- 回车事件 模拟点击事件
- 自动化测试程序之二模拟触摸屏点击事件和滑动事件(C语言)
- StringGrid右击选中表格(发消息给句柄模拟点击,右键点击也是MouseDown)
- 新增Activity、页面传值跳转和点击按钮触发事件『Android系列九』
- 【转】如何用SendMessage模拟某一按钮的点击事件
- android 百度地图系列之添加覆盖物和覆盖物的点击事件
- Javascript 模拟点击事件(点击链接与html点击) 兼容IE/Firefox
- Silverlight实战示例补充(数据集模拟挂接事件)
- javascript模拟点击事件--实现视频自动播放
- js模拟点击事件实现代码
- 2014.04.04实现 模拟a标签的点击事件