|
方法一:请阅读大气象学习园地的方法。 比如右键菜单,我们最关心的是如何屏蔽掉默认的菜单,如何在右击某个控件的时候显示对应的右键菜单。如何构造生成右键菜单,如何响应右键菜单的事件。这些问题寥寥几句代码就能说明问题了,但是高手都没有直说。当然这些文章包含了许多其他的知识点,值得以后参考。 如图: ![]()
<UserControl x:Class="TestSilverlightRightMouseClickDemo.UC_RightButton"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" mc:Ignorable="d" d:DesignHeight="300" d:DesignWidth="400"> <Grid x:Name="LayoutRoot" Background="White" MouseRightButtonDown="LayoutRoot_MouseRightButtonDown"> <Button Content="右键菜单" Height="23" HorizontalAlignment="Left" Margin="10,10,0,0" Name="btnRight" VerticalAlignment="Top" Width="75" /> </Grid> </UserControl> using System; 我试图在“ContextMenuService.SetContextMenu(btnRight, cm);//为控件绑定右键菜单” 这一句中使用一个现成的菜单代替cm ,报错:元素已经是另一个元素的子元素。 所以,如果你象我一样,不喜欢使用代码创建菜单,请使用另一种方法: 方法二: 第1步、设计:直接在设计界面中创建ContextMenu,添加N项MenuItem,MenuItem还可以添加子菜单,如果你不知道怎么使用VS2010设计菜单,请查阅其它资料。需要注意两点,一是最好将菜单放在顶层容器中,以便在各个控件边上自由走动;二是要事先设置Visibility属性为Collapsed,即先不显示。 第2步、定位:例如需要显示在控件A下方左对齐。需要在控件A的MouseEnter事件中添加以下代码: Dim p1 = e.GetPosition(Me.LayoutRoot) 前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而不感到无助。 |






骆驼户外男 真皮磨砂日常休闲鞋 低帮 2011秋冬新款 专柜正品特价