在实际应用中,我们动态添加矩形框,然后使用鼠标右键点击该矩形框,得到一个弹出窗口,再为此矩形框关联一些实际信息。即可实现用户自定义的配置页面。本节将讲两个小技巧:一.鼠标右键菜单。二.Silverlight全屏模式。
一.使用鼠标右键菜单。在这里我们需要单独引入两个Dll文件。(右键项目名称-->“添加引用”-->寻找到System.Windows.Controls.Input.Toolkit.dll[可以从本文源代码中找到])
System.Windows.Controls;
System.Windows.Controls.Input.Toolkit;
MainPage.xaml代码如下
1 <UserControl x:Class="SLRightMouseButton.MainPage" 2 3 xmlns:my="clr-namespace:System.Windows.Controls;assembly=System.Windows.Controls.Input.Toolkit" 4 5 xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 6 7 xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 8 9 Width="640" Height="480"> 10 11 <Canvas x:Name="LayoutRoot"> 12 13 <Rectangle x:Name="ti" Width="150" Height="150" RadiusX="5" RadiusY="5" Fill="Blue"></Rectangle> 14 15 <my:ContextMenuService.ContextMenu> 16 17 <my:ContextMenu Name="mymenu"> 18 19 <my:MenuItem Header="关联地区" Click="MenuItem_Click"/> 20 21 <my:Separator/> 22 23 <my:MenuItem Header="关联页面" Click="MenuItem_Click"/> 24 25 <my:Separator/> 26 27 <my:MenuItem Header="进入全屏" Click="MenuItem_Click"/> 28 29 </my:ContextMenu> 30 31 </my:ContextMenuService.ContextMenu> 32 33 </Canvas> 34 35 </UserControl>
在这里很明显是为名为ti的Rectangle矩形区域之内可以被右键点击,然后右键点击得到右键菜单“关联地区”“关联页面”“进入全屏”三项。这三个项目都加在到同一个点击事件MenuItem_Click中处理。
MainPage.xaml.cs文件关键代码处理MenuItem_Click事件代码如下
1 /// <summary> 2 3 /// 鼠标右键选择相应的项的事件 4 5 /// </summary> 6 7 /// <param name="sender"></param> 8 9 /// <param name="e"></param> 10 11 private void MenuItem_Click(object sender, RoutedEventArgs e) 12 13 { 14 15 MenuItem menuItem = (MenuItem)sender; 16 17 switch (menuItem.Header.ToString()) 18 19 { 20 21 case "关联地区": 22 23 MessageBox.Show("关联地区");//在此可以弹出一个窗口显示关联地区的子窗口。然后选择相应的数据,为此Rectangle关联地区 24 25 26 27 break; 28 29 case "关联页面": 30 31 MessageBox.Show("关联页面");//在此可以弹出一个窗口显示关联页面的子窗口。然后选择相应的数据,为此Rectangle关联页面 32 33 break; 34 35 case "进入全屏": 36 37 menuItem.Header = FullScreens(menuItem.Header.ToString());//调用FullScreens函数来设置当前是否全屏,以及获取下次点击鼠标右键获得的右键菜单Header字。 38 39 break; 40 41 case "取消全屏": 42 43 menuItem.Header = FullScreens(menuItem.Header.ToString()); 44 45 break; 46 47 default: 48 49 break; 50 51 } 52 53 mymenu.IsOpen = false;//右键菜单关闭 54 55 } 56 57 /// <summary> 58 59 /// 是否进入全屏 60 61 /// </summary> 62 63 /// <param name="IsScreen">全屏参数</param> 64 65 /// <returns></returns> 66 67 private string FullScreens(string IsScreen) 68 69 { 70 71 Application.Current.Host.Content.IsFullScreen = !Application.Current.Host.Content.IsFullScreen; 72 73 if (IsScreen == "进入全屏") 74 75 { 76 77 IsScreen = "取消全屏"; 78 79 } 80 81 else 82 83 { 84 85 IsScreen = "进入全屏"; 86 87 } 88 89 return IsScreen; 90 91 } 92 93 }
在代码中 使用MenuItem menuItem = (MenuItem)sender;捕捉到触发本事件的对象,然后判断当前对象的Header的值是多少?然后进行相应的处理就可以了。值得注意的是这里牵扯到了我们今天需要将的第二个小知识点。
二.Silverlight的全屏模式的进入。
Application.Current.Host.Content.IsFullScreen = !Application.Current.Host.Content.IsFullScreen; 就是这句简单的代码将可以让你的Silverlight程序进入或者退出全屏模式。
本实例源码基于Silverlight 4.0和VS 2010开发。
另外所需DLL下载点击:System.Windows.Controls.Data.Input.rar