添加一个<TextBlock>到Page.xaml中
新建立一个ContextMenuInterceptor类.这个类是用来处理页面中“OnContextMenu”事件的.在用到HTMLPage对象你需要引入System.Window.Browser命名空间.
在调用e.PeventDefault()方法后,将会取消右键点击事件.所以silverlight不会捕捉到它.
在这里我们已经成功的拦截了右键点击事件,做我们想做的任何事情了.;)
<UserControl x:Class="rightClick.Page" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" Width="400" Height="300"> <Grid x:Name="LayoutRoot" Background="White"> <TextBlock x:Name="MyField">Right click please.</TextBlock> </Grid> </UserControl>在页面中设置silverlight的参数Windowless="true"
<asp:Silverlight ID="Silverlight1" runat="server" Height="480px" MinimumVersion="2.0.30523" Source="~/ClientBin/rightClick.xap" Windowless="true" Width="640px" /> <object data="data:application/x-silverlight," type="application/x-silverlight-2-b2" width="100%" height="100%"> <param name="source" value="ClientBin/rightClick.xap"/> <param name="onerror" value="onSilverlightError" /> <param name="background" value="white" /> <param name="Windowless" value="true" /> <a href="http://go.microsoft.com/fwlink/?LinkID=115261" style="text-decoration: none;"> <img src="http://go.microsoft.com/fwlink/?LinkId=108181" alt="Get Microsoft Silverlight" style="border-style: none"/> </a> </object>最后修改Page.xaml.cs页面的代码
新建立一个ContextMenuInterceptor类.这个类是用来处理页面中“OnContextMenu”事件的.在用到HTMLPage对象你需要引入System.Window.Browser命名空间.
在调用e.PeventDefault()方法后,将会取消右键点击事件.所以silverlight不会捕捉到它.
在这里我们已经成功的拦截了右键点击事件,做我们想做的任何事情了.;)
using System; using System.Collections.Generic; using System.Linq; using System.Net; using System.Windows; using System.Windows.Controls; using System.Windows.Documents; using System.Windows.Input; using System.Windows.Media; using System.Windows.Media.Animation; using System.Windows.Shapes; using System.Windows.Browser; namespace rightClick { public partial class Page : UserControl { ContextMenuInterceptor _cmi = null; public Page() { InitializeComponent(); _cmi = new ContextMenuInterceptor(MyField); } } public class ContextMenuInterceptor { TextBlock TextField; public ContextMenuInterceptor(TextBlock textField) { TextField = textField; HtmlPage.Document.AttachEvent("oncontextmenu", this.OnContextMenu); } private void OnContextMenu(object sender, HtmlEventArgs e) { TextField.Text = "Right Clicked Blocked at " + e.OffsetX + "," + e.OffsetY; //Cancels the event if it is cancelable. e.PreventDefault(); } } }