Silverlight Toolkit有一个可爱的ContextMenu,可以在多个控件实例之间共享,例如Textbox。共享可以由在容器中声明的ContextMenu产生,该容器也承载其他控件。
<StackPanel>
<TextBox x:Name="box1" Text="{Binding str1}" />
<TextBox x:Name="box2" Text="{Binding str2}" />
<toolkit:ContextMenuService.ContextMenu>
<toolkit:ContextMenu Name="cm">
<toolkit:MenuItem Name="cmiCut" Header="Cut" />
<toolkit:MenuItem Name="cmiCopy" Header="Copy" />
<toolkit:Separator/>
<toolkit:MenuItem Name="cmiPaste" Header="Paste" />
</toolkit:ContextMenu>
</toolkit:ContextMenuService.ContextMenu>
</StackPanel>
通过调用ContextMenuService.SetContextMenu也可以实现共享。
当ContextMenu被共享时,它对于事件处理程序非常有用,可以知道右键单击了哪个控件来打开ContextMenu(例如上下文)。有人能提供一种有效的方法吗?
为了进行比较,这种需求在其他平台中得到了解决,如下所示:
谢谢,
比尔
答案 0 :(得分:1)
我要感谢Erik Noren关于这个主题的blogging。我在我的MainPage.xaml上的Visibility = Collapsed的Rectangle中定义了我的ContextMenu,这样它就不会处理鼠标右键单击事件。当在页面的任何位置单击鼠标右键时,我使用
VisualTreeHelper.FindElementsInHostCoordinates
在单击位置标识文本框,然后打开ContextMenu。 Erik使用SelectedText依赖属性查找控件的技术很棒。