Asp.Net教程,WinForm教程,Asp.Net MVC,vs2008教程,vs2010教程,Silverlight技术,源码下载,Asp.Net视频教程
全站热门标签
vs2010 Silverlight 存储过程 水晶报表 LINQ ADO.NET JavaScript DataGridView GridView AjaxPro DevExpress 面向对象 Extjs XML HTML教程 Oracle jQuery WPF MVC 分页 Office2010 GDI+ Visual C++2010 Dojo MySQL VB.NET WCF4.0 ASPxGridView WinForm textbox Sql2005 cookie Discuz!NT checkbox WCF SQL经典语句 T-SQL F# asp.net VS2008 SQL Ajax DropDownList VS2008新特性 TreeView Access Flex 页面执行时间 字符串 DataSet VB2005 回调 动画 C#时间 游戏 ASP.NET MVC
当前位置: 主页 > Silverlight >

Silverlight 4右键菜单的两种处理方法

时间:2012-02-03 21:01来源:未知 作者:admin 点击:

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

比如右键菜单,我们最关心的是如何屏蔽掉默认的菜单,如何在右击某个控件的时候显示对应的右键菜单。如何构造生成右键菜单,如何响应右键菜单的事件。这些问题寥寥几句代码就能说明问题了,但是高手都没有直说。当然这些文章包含了许多其他的知识点,值得以后参考。
 

如图:
 


 


以下是我的简单实现:

<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;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Animation;
using System.Windows.Shapes;

namespace TestSilverlightRightMouseClickDemo
{
    
public partial class UC_RightButton : UserControl
    {
        
public UC_RightButton()
        {
            InitializeComponent();
            BindMenu();
//只为按钮控件绑定右键菜单
        }

        
private void BindMenu()
        {
            ContextMenu cm 
= new ContextMenu();//新建右键菜单
            MenuItem mi = new MenuItem();//新建右键菜单项
            mi.Header = "菜单项";
            mi.Click 
+= MenuItem_Click;//为菜单项注册事件      
            cm.Items.Add(mi);
            ContextMenuService.SetContextMenu(btnRight, cm);
//为控件绑定右键菜单
        }

        
private void LayoutRoot_MouseRightButtonDown(object sender, MouseButtonEventArgs e)
        {
            e.Handled 
= true;//屏蔽默认的右键菜单
        }

        
private void MenuItem_Click(object sender, RoutedEventArgs e) 
        {
            MessageBox.Show(
"右键菜单事件");
        }
    }
}

我试图在“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而不感到无助。

Tags:Silverlight 右键菜单 4
责任编辑:admin
返回顶部
------分隔线----------------------------
推荐内容
骆驼户外男 真皮磨砂日常休闲鞋 低帮 2011秋冬新款 专柜正品特价 骆驼户外男 真皮磨砂日常休闲鞋 低帮 2011秋冬新款 专柜正品特价