博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Silverlight 4 右键菜单的两种处理方法
阅读量:5081 次
发布时间:2019-06-12

本文共 1088 字,大约阅读时间需要 3 分钟。

方法一:请阅读大气象学习园地的方法。

文章简明扼要,很受益。

我试图在“ContextMenuService.SetContextMenu(btnRight, cm);//为控件绑定右键菜单”

这一句中使用一个现成的菜单代替cm ,报错:元素已经是另一个元素的子元素。

所以,如果你象我一样,不喜欢使用代码创建菜单,请使用另一种方法:

方法二:

第1步、设计:直接在设计界面中创建ContextMenu,添加N项MenuItem,MenuItem还可以添加子菜单,如果你不知道怎么使用VS2010设计菜单,请查阅其它资料。需要注意两点,一是最好将菜单放在顶层容器中,以便在各个控件边上自由走动;二是要事先设置Visibility属性为Collapsed,即先不显示。

第2步、定位:例如需要显示在控件A下方左对齐。需要在控件A的MouseEnter事件中添加以下代码:

        Dim p1 = e.GetPosition(Me.LayoutRoot)

        Dim p2 = e.GetPosition(sender)
        Dim p = New Point(p1.X - p2.X, p1.Y - p2.Y + Me.btnTestMenu.Height)
        Me.menuMain.SetValue(ContextMenu.MarginProperty, New Thickness(p.X, p.Y, 0, 0))
        Me.menuMain.Visibility = Visibility.Visible

前3行代码,是为了获得控件A左下角的绝对坐标;原理是使用两个相对位置相减。注:btnTestMenu就是控件A。

第4行代码是将菜单放在指定位置上;

第5行代码是显示。

其它处理:在控件A的MouseLeave事件中要添加代码:  Me.menuMain.Visibility = Visibility.Collapsed  ;在菜单本身的MouseEnter事件中添加代码:Me.menuMain.Visibility = Visibility.Visible,在菜单MouseLeave事件中添加代码Me.menuMain.Visibility = Visibility.Collapsed  。

OK了,一般的菜单就可以了。

至于在某个容器中成为右键菜单,定位更加简单,可以参照以上实现。

感谢一些人共享了专业知识,使我接触到SL而不感到无助。

转载于:https://www.cnblogs.com/beginsoft/archive/2011/10/08/2201082.html

你可能感兴趣的文章
深度学习
查看>>
TCP粘包问题及解决方案
查看>>
构建之法阅读笔记02
查看>>
添加按钮
查看>>
移动端页面开发适配 rem布局原理
查看>>
Ajax中文乱码问题解决方法(服务器端用servlet)
查看>>
会计电算化常考题目一
查看>>
阿里云服务器CentOS6.9安装Mysql
查看>>
剑指offer系列6:数值的整数次方
查看>>
js 过滤敏感词
查看>>
poj2752 Seek the Name, Seek the Fame
查看>>
软件开发和软件测试,我该如何选择?(蜗牛学院)
查看>>
基本封装方法
查看>>
bcb ole拖拽功能的实现
查看>>
生活大爆炸之何为光速
查看>>
bzoj 2456: mode【瞎搞】
查看>>
[Typescript] Specify Exact Values with TypeScript’s Literal Types
查看>>
[GraphQL] Reuse Query Fields with GraphQL Fragments
查看>>
Illustrated C#学习笔记(一)
查看>>
理解oracle中连接和会话
查看>>