zoukankan      html  css  js  c++  java
  • Silverlight实用窍门系列:4.Silverlight 4.0添加鼠标右键菜单和Silverlight全屏模式的进入退出。【附带源码实例】

         继上节动态的添加Rectangle矩形框所讲。在实际应用中,我们动态添加矩形框,然后使用鼠标右键点击该矩形框,得到一个弹出窗口,再为此矩形框关联一些实际信息。即可实现用户自定义的配置页面。本节将讲两个小技巧:一.鼠标右键菜单。二.Silverlight全屏模式。

         一.使用鼠标右键菜单。在这里我们需要单独引入两个Dll文件。(右键项目名称-->“添加引用”-->寻找到System.Windows.Controls.Input.Toolkit.dll[可以从本文源代码中找到])

         System.Windows.Controls;

         System.Windows.Controls.Input.Toolkit;

         MainPage.xaml代码如下

    <UserControl x:Class="SLRightMouseButton.MainPage"
        xmlns:my="clr-namespace:System.Windows.Controls;assembly=System.Windows.Controls.Input.Toolkit" 
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
        Width="640" Height="480">
        <Canvas x:Name="LayoutRoot">
            <Rectangle x:Name="ti" Width="150" Height="150" RadiusX="5" RadiusY="5" Fill="Blue"></Rectangle>
            <my:ContextMenuService.ContextMenu>
                <my:ContextMenu Name="mymenu">
                    <my:MenuItem Header="关联地区" Click="MenuItem_Click"/>
                    <my:Separator/>
                    <my:MenuItem Header="关联页面" Click="MenuItem_Click"/>
                    <my:Separator/>
                    <my:MenuItem Header="进入全屏" Click="MenuItem_Click"/>
                </my:ContextMenu>
            </my:ContextMenuService.ContextMenu>
        </Canvas>
    </UserControl>
    

          在这里很明显是为名为ti的Rectangle矩形区域之内可以被右键点击,然后右键点击得到右键菜单“关联地区”“关联页面”“进入全屏”三项。这三个项目都加在到同一个点击事件MenuItem_Click中处理。

     MainPage.xaml.cs文件关键代码处理MenuItem_Click事件代码如下

      /// <summary>
            /// 鼠标右键选择相应的项的事件
            /// </summary>
            /// <param name="sender"></param>
            /// <param name="e"></param>
            private void MenuItem_Click(object sender, RoutedEventArgs e)
            {
                MenuItem menuItem = (MenuItem)sender;
                switch (menuItem.Header.ToString())
                {
                    case "关联地区":
                        MessageBox.Show("关联地区");//在此可以弹出一个窗口显示关联地区的子窗口。然后选择相应的数据,为此Rectangle关联地区
                        
                        break;
                    case "关联页面":
                        MessageBox.Show("关联页面");//在此可以弹出一个窗口显示关联页面的子窗口。然后选择相应的数据,为此Rectangle关联页面
                        break;
                    case "进入全屏":
                        menuItem.Header = FullScreens(menuItem.Header.ToString());//调用FullScreens函数来设置当前是否全屏,以及获取下次点击鼠标右键获得的右键菜单Header字。
                        break;
                    case "取消全屏":
                        menuItem.Header = FullScreens(menuItem.Header.ToString());
                        break;
                    default:
                        break;
                }
                mymenu.IsOpen = false;//右键菜单关闭
            }
            /// <summary>
            /// 是否进入全屏
            /// </summary>
            /// <param name="IsScreen">全屏参数</param>
            /// <returns></returns>
            private string FullScreens(string IsScreen)
            {
                Application.Current.Host.Content.IsFullScreen = !Application.Current.Host.Content.IsFullScreen;
                if (IsScreen == "进入全屏")
                {
                    IsScreen = "取消全屏";
                }
                else
                {
                    IsScreen = "进入全屏";
                }
                return IsScreen;
            }
        }
    

          在代码中 使用MenuItem menuItem = (MenuItem)sender;捕捉到触发本事件的对象,然后判断当前对象的Header的值是多少?然后进行相应的处理就可以了。值得注意的是这里牵扯到了我们今天需要将的第二个小知识点。

            二.Silverlight的全屏模式的进入。

      Application.Current.Host.Content.IsFullScreen = !Application.Current.Host.Content.IsFullScreen;
            就是这句简单的代码将可以让你的Silverlight程序进入或者退出全屏模式。

            本实例源码基于Silverlight 4.0和VS 2010开发。

            本小节的源码附上点击  https://files.cnblogs.com/chengxingliang/SLRightMouseButton.rar 

            另外所需DLL下载点击:System.Windows.Controls.Data.Input.rar

  • 相关阅读:
    蓝桥杯训练 | 枚举,模拟与排序 | 04
    linux全套 | Linux模板机器安装 | 18
    linux全套 | Shell编程 | 16
    MySQL主从复制延迟解决方案
    MySQL异地备份方案
    MYSQL必知必会-where语句
    MySQL常见面试题-概念题
    入门-MySQL查询语句的45道练习
    20145234黄斐《信息安全系统设计基础》第0周学习总结
    OpenGL代码学习(2)
  • 原文地址:https://www.cnblogs.com/chengxingliang/p/1954399.html
Copyright © 2011-2022 走看看