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