Windows 8 开发之上下文菜单(右键属性)的应用

在程序中,当右键单击某个对象时,会有小小的弹出菜单命令。如果你使用过Windows 8,你可能已经遇见到过上下文菜单了。经常在一些不可以选择的对象上右键单击,或者在text文本上进行操作时,会出现上下文菜单。什么时候使用上下文菜单,微软提供了非常详细的指导,下面将介绍如何实现上下文菜单。

1.确定要显示上下文菜单的位置

当我们创建弹出菜单时,首先需要确定出被点击element所在的位置,然后将位置传递给弹出菜单控件。下面的方法是确定element的位置:

复制代码

代码如下:

privateRect GetPoint(TextBox box)</p><p> { </p><p>Rect temp = box.GetRectFromCharacterIndex(box.SelectionStart, false);</p><p> GeneralTransform transform = box.TransformToVisual(null);</p><p> Point point = transform.TransformPoint(new Point());</p><p> point.X = point.X + temp.X;</p><p> point.Y = point.Y + temp.Y;</p><p> return new Rect(point, new Size(temp.Width, temp.Height));</p><p> }

2.创建上下文菜单的选项

1)为TextBox添加上下文菜单事件

复制代码

代码如下:

protected override void OnNavigatedTo(NavigationEventArgs e)</p><p> {</p><p> InputBox.ContextMenuOpening += InputBox_ContextMenuOpening;//InputBox是UI层的TextBox控件</p><p> }

2)当离开这个页面时移除上下文菜单事件

复制代码

代码如下:

protected override void OnNavigatedFrom(NavigationEventArgs e)</p><p> {</p><p> InputBox.ContextMenuOpening -= InputBox_ContextMenuOpening;</p><p> }

3)创建了一个PopupMenu菜单,并添加了一个command,然后调用ShowForSelectionAsync()方法将其显示出来。

复制代码

代码如下:

async void InputBox_ContextMenuOpening(object sender, ContextMenuEventArgs e)</p><p> {</p><p> e.Handled =true; //来取消原来的调用,然后创建自己的上下文菜单,并在适当的地方调用剪贴板(clipboard)</p><p> TextBox box = sender as TextBox;</p><p> PopupMenu menu = new PopupMenu();//创建PopupMenu菜单</p><p> menu.Commands.Add(new UICommand("复制", null, 0));</p><p> menu.Commands.Add(new UICommand("剪切", null, 1));</p><p> menu.Commands.Add(new UICommand("粘贴", null, 2));</p><p> menu.Commands.Add(new UICommand("全选", null, 3));</p><p> menu.Commands.Add(new UICommand("删除", null, 4));</p><p> var cmd = await menu.ShowForSelectionAsync(GetPoint(box)); //这里的菜单位置也可以使用 new Rect(e.CursorLeft,e.CursorTop,0,0);</p><p> if (cmd != null)</p><p> { </p><p>string text;</p><p> DataPackage package;</p><p> int index=(int)cmd.Id;</p><p>switch (index)</p><p> {</p><p> case 0:</p><p> text = box.SelectedText;</p><p> package =new DataPackage();</p><p> package.SetText(text);</p><p> Clipboard.SetContent(package);</p><p> break;</p><p> case 1:</p><p> text = box.SelectedText;</p><p> box.SelectedText ="";</p><p> package =new DataPackage();</p><p> package.SetText(text); </p><p> Clipboard.SetContent(package);</p><p> break;</p><p> case 2:</p><p> text =awaitClipboard.GetContent().GetTextAsync();</p><p> box.SelectedText = text; </p><p> break;</p><p> case 3:</p><p> box.SelectAll();</p><p> break;</p><p> case 4:</p><p> box.SelectedText ="";</p><p> break;</p><p> }</p><p> }</p><p> }

3.使用另一种方法,实现上下文菜单

1)先为TextBox注册右键事件,右键事件必须使用下面的方法注册,在页面上写RightTapped事件,是不起作用的。

复制代码

代码如下:

public MainPage()</p><p> {</p><p>this.InitializeComponent();</p><p> ContentText.AddHandler(RightTappedEvent, new RightTappedEventHandler(ContentText_RightTapped),true);</p><p> }

2).ContentText_RightTapped方法

复制代码

代码如下:

private async void ContentText_RightTapped(object sender, RightTappedRoutedEventArgs e)</p><p>{</p><p>//和 InputBox_ContextMenuOpening方法一样</p><p>}

UI层代码:

<Grid Background="{StaticResource ApplicationPageBackgroundThemeBrush}">

<TextBox x:Name="InputBox" Margin="100,50,50,660" />

<TextBox x:Name="ContentText" Margin="100,150,50,50"/>

</Grid>

注意:在上下文菜单中,最多可以添加6个command,当添加多余6个command时,会出现错误。

上下文菜单是非常好的方法:特别是为不可选的element提供交互,或者与邻近的element进行交互。

如需源代码,点击ContextMenu_jb51net.zip下载

(0)

相关推荐

  • windows XP文件夹右键属性中没有"安全"选项卡

    问:我使用的是Windows XP系统,为何在文件夹属性中找不到“安全”选项卡? 答:这可能是由以下原因造成的。 1.该文件夹所在分区不属于NTFS格式。目前,只有NTFS格式的分区才可以设置ACL( ...

  • 找回win7回收站右键属性菜单的方法

    找回win7回收站右键属性菜单的方法

  • win7系统回收站右键属性菜单消失的解决方法

    回收站是我们电脑中必不可少的小工具,对于它的使用性能根本不需要小编来介绍,因为大家都知道它是垃圾回收站,可以帮我们保存那些不需要使用的文件,这也有一个问题小编需要提醒大家的,就是垃圾回收站我们要及时清 ...

  • Windows 7系统如何删除鼠标右键菜单?

    上一篇我们讲了Windows 7系统如何增加鼠标右键菜单,但随着计算机使用时间的增长,鼠标右键菜单也会越来越多,甚至臃肿不堪.我们又应该如何设置来删除鼠标右键多余的菜单呢? 操作方法 01 Windo ...

  • 任务栏右键属性里没有开始菜单选项

    新版本的windows10设置选项做了很大的修改,对于关心隐私人来说,开始菜单直接列出最近使用的程序和内容很头痛,Windows8及以前直接在任务栏右键属性里就有开始菜单的选项卡,但现在却无法找到. ...

  • 如何更换Windows 7系统的开始菜单图标(开始按钮)

    你是否已经厌烦了Windows 7系统上开始菜单的图标,想要更换它?更换开始菜单的图标并不像更换桌面背景那样简单,你可以不借助什么特别的工具而轻易更换桌面背景,但想要更换开始图标你可能需要花费更多的精 ...

  • windows下Python+Editplus windows Python开发环境

    (1)从Python官方网站http://www.python.org/download/下载Python Windows下的最新的安装程序(python-3.1.1.msi)。 (2)双击运行安装程 ...

  • 如何在Windows Server 2008系统开始菜单中添加“计算机”选项?

    相信很多小伙伴都有在使用Windows Server 2008系统的电脑,在其中的开始菜单中如何才能添加"计算机"选项呢?方法很简单,下面小编就来为大家介绍.具体如下:1. 首先, ...

  • Windows 8技巧:Windows 8开发知识储备[实用篇]

    在本文中将整理出一些Windows 8开发前需要了解的一些基础知识并且列为相应的几个表格以供大家参考,如有误之处请指正,谢谢。 一、新建常用XAML项目类型模板和各种语言的关系 项目类型名 项目类型作 ...