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>