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

发布于 2024-12-12 06:20:22 字数 1071 浏览 0 评论 0原文

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 的 ContextMenuStrip 有 ToolStripItem.Owner.SourceControl

谢谢,

Bill

The Silverlight Toolkit has a lovely ContextMenu, which can be shared among multiple instances of controls such as Textbox. Sharing can result from the ContextMenu being declared in a container which also hosts other controls.

<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>

Sharing can also be achieved with a call to ContextMenuService.SetContextMenu.

When the ContextMenu is shared, it's very helpful for the eventhandler to know which control was right-clicked to open the ContextMenu (e.g. context). Could anyone offer an efficient way to do this?

For comparison, this need is addressed in other platforms as follows:

  1. WPF's ContextMenu has ContextMenu.PlacementTarget
  2. WinForms' ContextMenuStrip has ToolStripItem.Owner.SourceControl

Thanks,

Bill

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

空‖城人不在 2024-12-19 06:20:22

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

VisualTreeHelper.FindElementsInHostCoordinates

在单击位置识别一个文本框,然后打开上下文菜单。 Erik 查找具有 SelectedText 依赖属性的控件的技术非常出色。

I'd like to thank Erik Noren for blogging on this topic. I defined my ContextMenu in a Rectangle with Visibility=Collapsed on my MainPage.xaml so that it doesn't handle the mouse right click event. When the right mouse button is clicked anywhere on the page, I use

VisualTreeHelper.FindElementsInHostCoordinates

to identify a Textbox at the click position and then open the ContextMenu. Erik's technique for finding a control with SelectedText dependency property is brilliant.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文