Silverlight contextMenu 拖拽

Silverlight4 toolkit 提供了ContextMenu和MenuItem控件来实现右键菜单,下面是效果图

View Code
 1 <Canvas x:Name="LayoutRoot">
 2 <Border Height="30" Name="bType" Width="90" Canvas.Left="96" BorderThickness="1" BorderBrush="Gray" Background="Transparent" MouseLeftButtonDown="Border_MouseLeftButtonDown" MouseMove="Border_MouseMove" MouseLeftButtonUp="mouseLeftUp">
 3             <sdk:Label Name="lbSencond" HorizontalAlignment="Center" Content="类型" />
 4             <my:ContextMenuService.ContextMenu>
 5                 <my:ContextMenu Name="TypeMenu" Background="Transparent">
 6                     <my:MenuItem Header="植物" Click="TypeMenu_Click">
 7                         <my:MenuItem.Icon>
 8                             <Image Width="16" Height="16" Source="images/zhiwu.jpg" />
 9                         </my:MenuItem.Icon>
10                     </my:MenuItem>
11                     <my:Separator />
12                     <my:MenuItem Header="动物" Click="TypeMenu_Click">
13                         <my:MenuItem.Icon>
14                             <Image Width="16" Height="16" Source="images/dongwu.jpg" />
15                         </my:MenuItem.Icon>
16                     </my:MenuItem>
17                 </my:ContextMenu>
18             </my:ContextMenuService.ContextMenu>
19         </Border>
20 </Canvas>

下面是cs代码

View Code
 1  private bool isDrag;
 2         private Point startPoint;
 3         private Point endPoint;
 4 
 5         public MainPage()
 6         {
 7             InitializeComponent();
 8           
 9         }     
10 
11         private void TypeMenu_Click(object sender, RoutedEventArgs e)
12         {
13             MenuItem item = (MenuItem)sender;
14             switch (item.Header.ToString())
15             {
16                 case"动物":
17                     MessageBox.Show(item.Header.ToString());
18                     break;
19                 case"植物":
20                     MessageBox.Show("类型是植物");
21                     break;
22                 default:
23                     break;
24             }
25             TypeMenu.IsOpen = false;
26         }
27 
28         private void mouseLeftUp(object sender, MouseButtonEventArgs e)
29         {
30             isDrag = false; 
31         }
32 
33        
34 
35 
36         private void Border_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
37         {
38             Point p = e.GetPosition(LayoutRoot);
39             SetDrag(p, bType);
40         }
41 
42         private void Border_MouseMove(object sender, MouseEventArgs e)
43         {
44             if (isDrag)
45             {
46                 endPoint = e.GetPosition(LayoutRoot);
47                
48                 Position(endPoint, bType);
49             }
50         }
51 
52         private void Position(Point end, UIElement uiName)
53         {
54             //计算X、Y轴起始点与终止点之间的相对偏移量
55             double x = end.X - startPoint.X;
56             double y = end.Y - startPoint.Y;
57 
58             Point positon = new Point((double)Canvas.GetLeft(uiName), (double)Canvas.GetTop(uiName));
59             positon.X += x;
60             positon.Y += y;
61 
62             Canvas.SetLeft(uiName, positon.X);
63             Canvas.SetTop(uiName, positon.Y);
64             startPoint = end;
65         }
66 
67         private void SetDrag(Point start, UIElement uiName)
68         {
69             isDrag = true;
70             startPoint = start;
71             uiName.CaptureMouse();
72         }

posted on 2012-05-07 16:57  lovezj9012  阅读(808)  评论(0编辑  收藏  举报

导航