【问题标题】:Silverlight Toolkit ContextMenu: Which control was right-clicked?Silverlight Toolkit ContextMenu:右键单击了哪个控件?
【发布时间】:2011-10-26 22:55:24
【问题描述】:

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

谢谢,

比尔

【问题讨论】:

    标签: silverlight-4.0 contextmenu silverlight-toolkit


    【解决方案1】:

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

    VisualTreeHelper.FindElementsInHostCoordinates
    

    在点击位置标识一个Textbox,然后打开ContextMenu。 Erik 查找具有 SelectedText 依赖属性的控件的技术非常出色。

    【讨论】:

      猜你喜欢
      • 2011-06-16
      • 1970-01-01
      • 2011-07-20
      • 2020-10-18
      • 2011-12-05
      • 1970-01-01
      • 1970-01-01
      • 2013-06-18
      • 2012-07-20
      相关资源
      最近更新 更多