silverlight中可以处理很多键盘和鼠标事件,然而遗憾的是这些事件并不包括鼠标右键事件:鼠标右键事件被Silverlight 自己的上下文菜单“Silverlight Configuration”占用;然而富交互程序大都希望使用鼠标右键弹出上下文菜单或实现快捷操作。
幸运的是,前辈大牛们早已解决了这个问题,本文参考已有的解决方案,给出了详细的实现步骤。
silverlight中可以处理很多键盘和鼠标事件,然而遗憾的是这些事件并不包括鼠标右键事件:鼠标右键事件被Silverlight 自己的上下文菜单“Silverlight Configuration”占用;然而富交互程序大都希望使用鼠标右键弹出上下文菜单或实现快捷操作。
幸运的是,前辈大牛们早已解决了这个问题,要实现在程序中使用右键,实际上也挺简单的,废话不说,直接看实现步骤。
第一步、打开嵌入Silverlight控件对象的Aspx或html文件,设置Silverlight控件的Windowless属性为 true 。例如:
Aspx文件:
Code
<asp:Silverlight ID="Xaml1" runat="server" Windowless="true" Source="~/ClientBin/SlControl.xap" MinimumVersion="2.0.31005.0" Width="100%" Height="100%" />
Html文件:
Code
<object data="data:application/x-silverlight-2," type="application/x-silverlight-2" width="100%" height="100%">
<param name="source" value="ClientBin/CreateChartFromManagedCode.xap"/>
<param name="onerror" value="onSilverlightError" />
<param name="background" value="white" />
<param name="minRuntimeVersion" value="2.0.31005.0" />
<param name="autoUpgrade" value="true" />
<param name="Windowless" value="true" />
<a href="http://go.microsoft.com/fwlink/?LinkID=124807" style="text-decoration: none;">
<img src="http://go.microsoft.com/fwlink/?LinkId=108181" alt="Get Microsoft Silverlight" style="border-style: none"/>
</a>
</object>
第二步、在.CS文件中添加Page_Loaded事件处理,替换原来Silverlight的右键上下文菜单处理,代码如下:
Code
private void Page_Loaded(object sender, RoutedEventArgs e)
{
HtmlPage.Document.AttachEvent("onmousedown", CatchOnMouseDown);
HtmlPage.Document.AttachEvent("onmouseup", CatchOnMouseUp);
HtmlPage.Document.AttachEvent("oncontextmenu", CatchOnContextMenu);
}
private void CatchOnMouseDown(object sender, HtmlEventArgs e)
{
if (e.MouseButton == MouseButtons.Right)
{
//MessageBox.Show("Right Clicked Blocked at " + e.OffsetX + "," + e.OffsetY);
}
}
private void CatchOnMouseUp(object sender, HtmlEventArgs e)
{
if (e.MouseButton == MouseButtons.Right)
{
//MessageBox.Show("Right Clicked Blocked at " + e.OffsetX + "," + e.OffsetY);
}
}
private void CatchOnContextMenu(object sender, HtmlEventArgs e)
{
MessageBox.Show( "Right Clicked Blocked at " + e.OffsetX + "," + e.OffsetY);
e.PreventDefault();
}
至此,您就完成了对原来Silverlight上下文菜单的屏蔽,也即可以使用右键功能了。
本文参考了:http://blogs.msdn.com/msnow/archive/2008/11/19/silverlight-tip-of-the-day-14-how-to-right-click-on-a-silverlight-application.aspx