Get owner of context menu in code Get owner of context menu in code wpf wpf

Get owner of context menu in code


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


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


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