Silverlight Toolkit ContextMenu:右键单击了哪个控件?

时间:2011-10-26 22:55:24

标签: silverlight-4.0 contextmenu silverlight-toolkit

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(例如上下文)。有人能提供一种有效的方法吗?

为了进行比较,这种需求在其他平台中得到了解决,如下所示:

  1. WPF的ContextMenu有ContextMenu.PlacementTarget
  2. 的WinForms&#39; ContextMenuStrip具有ToolStripItem.Owner.SourceControl
  3. 谢谢,

    比尔

1 个答案:

答案 0 :(得分:1)

我要感谢Erik Noren关于这个主题的blogging。我在我的MainPage.xaml上的Visibility = Collapsed的Rectangle中定义了我的ContextMenu,这样它就不会处理鼠标右键单击事件。当在页面的任何位置单击鼠标右键时,我使用

VisualTreeHelper.FindElementsInHostCoordinates

在单击位置标识文本框,然后打开ContextMenu。 Erik使用SelectedText依赖属性查找控件的技术很棒。