Windows 8实用窍门系列:16.Windows 8的右键菜单

简介:

在Windows 8中的控件中有TextBox等输入控件的ContextMenuOpening事件和Button等非输入控件的RightTapped事件。

  本文中将讲述者两个事件的用法。这两个事件的

  PopupMenu是右键弹出菜单的具体类。

  首先我们看具体菜单类的实例化和获取项目代码

复制代码
        /// <summary>
        /// 设置右键点击点击具体处理细节
        /// </summary>
        /// <param name="sender"></param>
        public async void SetRightClick(object sender)
        {
            //增加菜单
            PopupMenu menu = new PopupMenu();
            menu.Commands.Add(new UICommand("复制0", null, 0));
            menu.Commands.Add(new UICommand("剪切1", null, 1));
            menu.Commands.Add(new UICommand("粘贴2", null, 2));
            menu.Commands.Add(new UICommandSeparator());
            menu.Commands.Add(new UICommand("Full Screen", null, 3));
            menu.Commands.Add(new UICommand("Snap Screen", null, 4));
            //获取选择的菜单项
            var cmd = await menu.ShowForSelectionAsync(GetRectPosition((FrameworkElement)sender));
            if (cmd != null)
            {
                switch ((int)cmd.Id)
                {
                    case 0:
                        tbText.Text = "选择了(" + cmd.Label + ") ,其ID为" + cmd.Id;
                        break;
                    case 1:
                        tbText.Text = "选择了(" + cmd.Label + "),其ID为" + cmd.Id;
                        break;
                    case 2:
                        tbText.Text = "选择了(" + cmd.Label + ") ,其ID为" + cmd.Id;
                        break;
                    case 3:
                        tbText.Text = "选择了(" + cmd.Label + ") ,其ID为" + cmd.Id;
                        break;
                    case 4:
                        tbText.Text = "选择了(" + cmd.Label + ") ,其ID为" + cmd.Id;
                        break;
                }
            }
            else
            {
                tbText.Text = "上下文菜单";
            }
        }
        //获取菜单位置
        Rect GetRectPosition(FrameworkElement element)
        {
            GeneralTransform btnform = element.TransformToVisual(null);
            Point point = btnform.TransformPoint(new Point());
            return new Rect(point, new Size(element.ActualWidth, element.ActualHeight));
        }
复制代码

  然后我们看看注册两个控件的右键处理事件如下:

复制代码
       /// <summary>
        /// Invoked when this page is about to be displayed in a Frame.
        /// </summary>
        /// <param name="e">Event data that describes how this page was reached.  The Parameter
        /// property is typically used to configure the page.</param>
        protected override void OnNavigatedTo(NavigationEventArgs e)
        {
            base.OnNavigatedTo(e);
            //上下文菜单
            this.tbName.ContextMenuOpening += tbName_ContextMenuOpening;
            //右键菜单
            this.gdMenu.RightTapped += gdMenu_RightTapped;
        }

        /// <summary>
        /// 右键菜单事件
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        void gdMenu_RightTapped(object sender, RightTappedRoutedEventArgs e)
        {
            SetRightClick(sender);
        }

        /// <summary>
        /// 上下文菜单
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        void tbName_ContextMenuOpening(object sender, ContextMenuEventArgs e)
        {
            SetRightClick(sender);
        }

        /// <summary>
        /// 事件卸载
        /// </summary>
        /// <param name="e"></param>
        protected override void OnNavigatedFrom(NavigationEventArgs e)
        {
            base.OnNavigatedFrom(e);
            //上下文菜单
            this.tbName.ContextMenuOpening -= tbName_ContextMenuOpening;
            //右键菜单
            this.gdMenu.RightTapped -= gdMenu_RightTapped;
        }
复制代码

  再次看看前台Xaml代码如下:

复制代码
    <Grid Background="{StaticResource ApplicationPageBackgroundThemeBrush}" Name="gdMenu">
        <TextBox HorizontalAlignment="Left" Margin="141,164,0,0" TextWrapping="Wrap"
                 Name="tbName" Text="" VerticalAlignment="Top" Height="157" Width="540"/>
        <TextBox HorizontalAlignment="Left" Margin="210,353,0,0" TextWrapping="Wrap" 
                 Name="tbText" Text="" VerticalAlignment="Top" Width="290"/>
    </Grid>
复制代码

  如需源码请点击 Win8Menu.rar 下载,下面是效果图.


本文转自程兴亮博客园博客,原文链接:http://www.cnblogs.com/chengxingliang/archive/2013/01/30/2880627.html,如需转载请自行联系原作者


相关文章
|
5月前
|
自然语言处理 C# Windows
C#开源免费的Windows右键菜单管理工具
C#开源免费的Windows右键菜单管理工具
|
Shell 开发者 Windows
windows 10中将任意程序添加进鼠标右键菜单里面
windows 10中将任意程序添加进鼠标右键菜单的详细步骤
214 0
windows 10中将任意程序添加进鼠标右键菜单里面
|
2月前
|
Windows
Windows——添加右键菜单选项
Windows——添加右键菜单选项
29 0
|
Shell C++ Python
VScode 右键菜单加入使用用VSCode打开文件和文件夹【Windows】
鼠标右击文件或者文件夹,可直接用VSCode打开,非常方便。但如果我们在安装VSCode的时候没有勾选这2个选项,那就享受不到这个便捷的功能了,那么怎么办呢?此时存在2种方法进行修复:重装软件在安装的过程中勾选上这2个选项即可(肯定我们不愿意,很多配置和插件都用习惯了,再装很费事,即使是 setting sync 也免不了麻烦,尤其是配置了python或C/C++的开发环境,所以这个我们不推荐)安装勾选修改注册表右键打开文件右键打开文件夹。
409 0
|
11月前
|
C++ Windows
windows从右键菜单选择vscode打开当前目录项目
vscode 每次打开新项目都要先打开vscode在从里面打开目录,每次这样感觉效率比较低,就想着能不能有一个我直接在当前目录下右键菜单,点一下就直接用vscode打开当前目录,总共找到3种方案
117 0
|
Windows
如何解决 Windows 10 下右键菜单无法新建文件 | 一日一技
如何解决 Windows 10 下右键菜单无法新建文件 | 一日一技
153 0
|
Shell Windows
mac/windows右键菜单
mac/windows右键菜单
139 0
Windows11右键菜单太烦人,简单几步即可恢复旧版完整菜单
Windows 11已经推出一段时间了,相比Windows 10,界面确实美观了不少,同时也有很多新的设计。
Windows11右键菜单太烦人,简单几步即可恢复旧版完整菜单
下一篇
无影云桌面