Silverlight4中右键菜单实现-附源码下载

Silverlight4中右键菜单实现-附源码下载,第1张

概述在发布Silverlight4 Beta版本和RC时 增加不少新的特性和控件. 类似在WinForm实现右键菜单ContentMenu功能. 在Silverlight 4中也有所体现. 当初在Silverlight4还是beta版本时 就有很多人问我如何实现右键菜单功能. 当时beta版本更新只是增加两个右键点击事件.分别为: MouseRightButtonDown   MouseRightBu

在发布Silverlight4 Beta版本和RC时 增加不少新的特性和控件. 类似在WinForm实现右键菜单ContentMenu功能. 在Silverlight 4中也有所体现.

当初在Silverlight4还是beta版本时 就有很多人问我如何实现右键菜单功能. 当时beta版本更新只是增加两个右键点击事件.分别为:

MouseRightbuttonDown   MouseRightbuttonUp [右键按下和释放事件]

在绝大多数情况下这个右击事件被开发人员用来做了右键菜单,而最新发布的Toolkit for march 2010里新增加了一个ContextMenu控件来实现右击菜单的功能.Silverlight4正式版中增加了所有UIElement 对MouseRightbuttonDown和MouseRightbuttonUp *** 作支持,总而言之是改进一大.这让我们实现其一个右键菜单ContentMenu更加快捷简便.

先看看实现效果:右键点击文本框显示ContentMenu

具体效果如上 为了达到演示目的 我做了一个比较简单运用,其中也涉及到剪切板部分 *** 作. 具体实现步骤如下:

A:创建一个默认的Silverlight应用程序即可 记住Silverlight版本选择4.0. 页面布局:

  <!--Excepetcion:Property Contentmenu does not support value the type grID-->       <Canvas x:name="LayoutRoot" WIDth="450" Height="400" Background="White">                      <TextBlock Text="Right Click ContextMenu in Silverlight 4" FontSize="16" Foreground="Red" Canvas.top="12" Canvas.left="12" Height="23" WIDth="357"></TextBlock>               <TextBox x:name="tb" Text="Select Text and Right Click" Canvas.left="59" Canvas.top="49" Height="26" WIDth="300" />                   <my:ContextMenuService.ContextMenu>                       <my:ContextMenu name="mymenu">                           <my:MenuItem header="Cut" Click="MenuItem_Click"/>                           <my:MenuItem header="copy" Click="MenuItem_Click"/>                           <my:Separator/>                           <my:MenuItem header="Paste" Click="MenuItem_Click"/>                         <my:MenuItem x:name="definemyself" Click="MenuItem_Click">                           <my:MenuItem.header>                               <StackPanel OrIEntation="Horizontal">                                   <Image Source="/TestSilverlightRightmouseClickDemo;component/Images/Vis_F_blue_Lo-res.jpg" WIDth="30" Height="30" />                                   <TextBlock Text="附带有Image样式" padding="5"></TextBlock>                               </StackPanel>                          </my:MenuItem.header>                                                 </my:MenuItem>                       <my:MenuItem header="Chenkai制作右键菜单Demo" Click="MenuItem_Click"/>                   </my:ContextMenu>                   </my:ContextMenuService.ContextMenu>                         </Canvas>   

页面布局采用的是Canvas. 当初在从ToolKit中拖入ContextMenu控件时提示一个异常信息:"Exceptcion:Property Contentmenu does not support value the type grID”

把默认布局GrID改成Canvas默认定位即可.

可能你已经注意到了,我使用的附加属性的ContextMenuService.ContextMenu,主要原因在WPF中 你可以使用FrameWorkElement.ContextMenu属性将ContextMenu附加到一个元素,但在Silverlight中不支持,所以ContextMenuService.ContextMenu也提供了类似的功能.

B:在ContextMenu中添加多个MenuItem,为了演示我对菜单并没有美化效果. 后台的Click="MenuItem_Click"事件代码如下:

  private voID MenuItem_Click(object sender, RoutedEventArgs e)               {                   MenuItem menuItem = (MenuItem)sender;                   switch (menuItem.header.ToString())                   {                       case "Cut":                           Clipboard.SetText(tb.SelectedText);                           tb.SelectedText = "";                           tb.Focus();                           break;                       case "copy":                           Clipboard.SetText(tb.SelectedText);                           tb.Focus();                           break;                       case "Paste":                           tb.SelectedText = Clipboard.GetText();                           break;                       case "Chenkai制作右键菜单Demo":                           MessageBox.Show("Author:chenkai Date:2010年5月27日11:09:51 文章附有源码下载 :)!");                           break;                       default:                           break;                   }                   mymenu.IsOpen = false;               }   

C:注意事项

(1)当第一次运行程序时右键单击文本框 浏览器提示:

其实到这了解Silverlight 4新特性朋友应该能看出来. 4.0版本中增加了对摄像头、剪切板等的用户对话框,用于用户选择 *** 作.当启用剪切板后才能正常演示该程序,否则会提示一个异常信息. "Application OPerator Exception:没有启用剪切板".

(2)剪切板的使用:

在上面的代码,我们编程时访问该菜单项被点击的ContextMenu做的TextBox的剪切,复制和粘贴来 *** 作剪贴板,具体 *** 作提示如下:

Clipboard.SetText() 从一个Silverlight应用程序数据复制到剪贴板

Clipboard.GetText() 从剪切板中获得copy复制数据

Cut剪切则只需使用Clipboard.SetText(),并设置当前选择的内容到一个空字符串 即可 *** 作简便.为了演示目的,如果想了解更多可找一些新特性文章查看详细 *** 作. 

有人也许会问如果没有正式版版本的ContextMenu控件如何利用两个右击事件实现这Menu右击菜单效果.? 其实这个在Beta时就没有这个控件,但依然能够实现.具体的 *** 作请参见风云的风云的银光志Silverlight4.0教程之使用鼠标右键事件和滚轮事件.也很简单不在这里不再赘述.

当然细心朋友也能够看出. 能不能把这个Menu右键菜单 做成多个级别关联的.Silverlight 4.0 Beta版本是不支持的,上例中我也做了尝试.但尚未成功!希望有实现这方面的经验相告.. 转载请注明出去.如有疑问请在留言中回复.源代码下载如下:

Silverlight 4.0 右击菜单实现源码见附件。

总结

以上是内存溢出为你收集整理的Silverlight4中右键菜单实现-附源码下载全部内容,希望文章能够帮你解决Silverlight4中右键菜单实现-附源码下载所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://www.outofmemory.cn/web/1031596.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-23
下一篇 2022-05-23

发表评论

登录后才能评论

评论列表(0条)

保存