none
WPF ContextMenu's Owner RRS feed

  • 问题

  •  

    在 MSDN Library/.NET Framework/Windows Presentation Foundation/ 主题中找不到相关资料.

     

     

    [关于 ContextMenu 的 Owner]

    在 ContextMenu 的 MenuItem 的 Click 事件中, 如何判断是哪个元素激活该 ContextMenu  的.

    例如:

    <Window.Resources>

    <ContextMenu x:Key="sampleContextMenu">

    <MenuItem Header="MenuItem1" Click="WhoBringMeOut" />

    </ContextMenu>

    ...

    </Window.Resources>

     

     

    <TreeView>

    <TreeViewItem Header="TreeViewItem1" ContextMenu="{StaticResource sampleContextMenu}" />

    <TreeViewItem Header="TreeViewItem2" ContextMenu="{StaticResource sampleContextMenu}" />

    <TreeViewItem Header="TreeViewItem3"/>

    </TreeView>

    <DockPanel ContextMenu="{StaticResource sampleContextMenu}" >

    <Image Source="img1.ico" />

    <TextBlock Text="QuicklyAccess" />

    </DockPanel>

     

    Private Sub WhoBringMeOut(ByVal sender As Object, ByVal e As System.Windows.RoutedEventArgs)

    ' if TreeViewItem1              ?????

    '...

    'else if TreeViewItem2         ?????

    '...

    'else if objtype=DockPanel   ?????

    'end if

    End Sub

    2009年1月22日 3:51

答案

  • WPF的ContextMenu没有类似WinForm里面ContextMenu.SourceControl的概念,但是你可以通过ContextMenuService的GetPlacementTarget方法来获取类似的效果。

     

    然而,看起来WPF在MenuItem.Click事件处理上面有一点bug,就是你不能通过

    (sender as MenuItem).ContextMenu

    获取到点击的右键菜单,只好求助于LogicalTreeHelper.GetParent方法了,Sad

     

    使用下面的方法获取到ContextMenu的Owner

     

    Code Snippet

    ContextMenuService.GetPlacementTarget(LogicalTreeHelper.GetParent(sender as MenuItem))

     

     

     

     

    2009年1月22日 13:41

全部回复

  • WPF的ContextMenu没有类似WinForm里面ContextMenu.SourceControl的概念,但是你可以通过ContextMenuService的GetPlacementTarget方法来获取类似的效果。

     

    然而,看起来WPF在MenuItem.Click事件处理上面有一点bug,就是你不能通过

    (sender as MenuItem).ContextMenu

    获取到点击的右键菜单,只好求助于LogicalTreeHelper.GetParent方法了,Sad

     

    使用下面的方法获取到ContextMenu的Owner

     

    Code Snippet

    ContextMenuService.GetPlacementTarget(LogicalTreeHelper.GetParent(sender as MenuItem))

     

     

     

     

    2009年1月22日 13:41
  • 非常感谢 Killmyday, 您已经为我解答了相当多的问题 (直接或间接).

    -----------------------------------------------------------------------------

    新年将到, 祝你新年快乐. (此贴不算违规, 是吗?)

     

    2009年1月22日 23:22