1.添加一个<TextBlock>到Page.xaml中
<UserControl x:Class="rightClick.Page"
xmlns="
http://
scheR_854_11845@a
s.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="
http://
scheR_854_11845@a
s.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>
2.在页面中设置silverlight的参数Windowless="true" @H_675_34@(这一点是最关键的!!!!!)
<asp:Silverlight ID="Silverlight1" runat="server" Height="480px"
MinimumVersion="2.0.30523"
source="~/ClientBin/rightClick.xap"
Windowless="true" Width="640px" />
<ob
ject 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>
</ob
ject>
3.最后修改Page.xaml.cs页面的代码
新建立一个ContextMenuInterceptor类.这个类是用来处理页面中“OnContextMenu”事件的.在用到HTMLPage对象你需要引入System.Window.browser命名空间.
在调用e.PeventDefault()方法后,将会取消右键点击事件.所以silverlight不会捕捉到它.
在这里我们已经成功的拦截了右键点击事件,做我们想做的任何事情了.;)
using Sy
stem; using Sy
stem.Collection
s.Generi
c; using Sy
stem.Linq; using Sy
stem.Net; using Sy
stem.Windows; using Sy
stem.Window
s.Controls; using Sy
stem.Window
s.Documents; using Sy
stem.Window
s.Input; using Sy
stem.Window
s.Media; using Sy
stem.Window
s.Media.Animation; using Sy
stem.Window
s.Shapes; using Sy
stem.Windows
.browser; namespace rightClick
{ public partial class Page : UserControl
{ Co
ntextMenuInterceptor _cmi = null;
public Page()
{ InitializeComponent(
); _cmi = new Co
ntextMenuInterceptor(MyField
); } } public class Co
ntextMenuInterceptor
{ TextBlock TextField;
public Co
ntextMenuInterceptor(TextBlock textField)
{ TEXTField = textField;
HtmlPage.Document.AttachEvent("onco
ntextmenu",thi
s.OnCo
ntextMenu
); }
private void OnCo
ntextMenu(ob
ject sender,HtmlEventArgs
E) { TEXTField.Text = "Right Clicked Blocked at " + e
.offsetX + "," + e
.offsetY;
//Cancels the event if
it is cancelable.
e.PreventDefault(
); } } }