CS

 1   public partial class SilverlightControl20140820 : UserControl
 2     {
 3         private ContextMenu cm = new ContextMenu();
 4 
 5         private Point OldMouseDownPoint;
 6         private bool MouseMoveFlg = false;
 7 
 8         public SilverlightControl20140820()
 9         {
10             InitializeComponent();
11             this.Loaded += new RoutedEventHandler(MainPage_Loaded);
12 
13             this.MouseMove += new MouseEventHandler(SilverlightControl20140820_MouseMove);
14         }
15 
16         void SilverlightControl20140820_MouseMove(object sender, MouseEventArgs e)
17         {
18             if (MouseMoveFlg == false)
19             {
20                 MouseMoveFlg = true;
21             }
22 
23         }
24 
25         void MainPage_Loaded(object sender, RoutedEventArgs e)
26         {
27             this.bd.MouseRightButtonDown += new MouseButtonEventHandler(bd_MouseRightButtonDown);
28             this.LayoutRoot.MouseRightButtonDown += new MouseButtonEventHandler(LayoutRoot_MouseRightButtonDown);
29 
30         }
31 
32         void bd_MouseRightButtonDown(object sender, MouseButtonEventArgs e)
33         {
34 
35             TextBlock tb = new TextBlock();
36             tb.Text = "Right Click";
37             MenuItem mitem = new MenuItem();
38             mitem.Header = tb;
39 
40             ContextMenuShow(mitem, e);
41 
42         }
43 
44 
45         private void LayoutRoot_MouseRightButtonDown(object sender, MouseButtonEventArgs e)
46         {
47 
48             TextBlock tb = new TextBlock();
49             tb.Text = "LayoutRoot_MouseRightButtonDown";
50             MenuItem mitem = new MenuItem();
51             mitem.Header = tb;
52             ContextMenuShow(mitem, e);
53         }
54 
55 
56         private void ContextMenuShow(MenuItem mitem, MouseButtonEventArgs e)
57         {
58 
59             Point newDownPoint = e.GetPosition(this);
60             //鼠标移动后 
61             if (MouseMoveFlg == true)
62             {
63                 this.cm.VerticalOffset = 0;
64                 this.cm.HorizontalOffset = 0;
65                 OldMouseDownPoint = newDownPoint;
66             }
67             //鼠标在画面上没有移动  
68             else
69             {
70                 this.cm.VerticalOffset = (newDownPoint.Y - this.OldMouseDownPoint.Y);
71                 this.cm.HorizontalOffset = (newDownPoint.X - this.OldMouseDownPoint.X);
72             }
73             MouseMoveFlg = false;
74 
75             this.cm.Items.Add(mitem);
76             if (cm.Items.Count > 10)
77             {
78                 cm.Items.RemoveAt(0);
79             }
80             this.cm.IsOpen = true;
81             e.Handled = true;
82 
83         }
84     }

Xaml

 1 <UserControl x:Class="SilverlightTest.SilverlightControl20140820"
 2     xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
 3     xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
 4     xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
 5     xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
 6     mc:Ignorable="d"
 7     d:DesignHeight="300" d:DesignWidth="400">
 8     
 9     <Grid x:Name="LayoutRoot" Background="Violet"  >
10         <Border x:Name="bd" Height="100" Width="100" Background="Red" ></Border>
11     </Grid>
12 </UserControl>