Get owner of context menu in code

前端 未结 3 734
抹茶落季
抹茶落季 2020-12-15 03:56

I have a ContextMenu like this:


    
        
            


        
相关标签:
3条回答
  • 2020-12-15 04:11

    the context menu has its own visual tree, try this calling this from your event handler like so :-

    StackPanel stackPanel = GetStackPanelItemFromContextMenu((FrameworkElement)sender, yourStackPanel);
    
      private StackPanel GetStackPanelItemFromContextMenu(FrameworkElement sender, StackPanel stackPanel) {
         Point menuClickPoint = ((sender as FrameworkElement).Parent as ContextMenu).TranslatePoint(new Point(0, 0), stackPanel);
    
         // get the first potential object that was hit   
         DependencyObject obj = stackPanel.InputHitTest(menuClickPoint) as DependencyObject;
    
         // cycle up the tree until you hit the StackPanel
         while (obj != null && !(obj is StackPanel)) {
            obj = VisualTreeHelper.GetParent(obj);
         }
    
         return obj as StackPanel;
      }
    
    0 讨论(0)
  • 2020-12-15 04:26

    this will give you the exact thing you want

    private void OnDeleteClicked(object sender, System.Windows.RoutedEventArgs e)
    {
        MenuItem mnu = sender as MenuItem;
        StackPanel sp = null;
        if(mnu!=null)
        {
            sp = ((ContextMenu)mnu.Parent).PlacementTarget as StackPanel;
        }
    }
    

    Hope this helps!!

    0 讨论(0)
  • 2020-12-15 04:36

    The visual tree for ContextMenus and Popups works a little differently. You can use ContextMenu.PlacementTarget to get the StackPanel. There is more information available on MSDN here: http://msdn.microsoft.com/en-us/library/system.windows.controls.contextmenu.placementtarget.aspx

    0 讨论(0)
提交回复
热议问题