I have a ContextMenu
like this:
<StackPanel Orientation="Horizontal">
<StackPanel.ContextMenu>
<ContextMenu>
<MenuItem Header="Delete" Click="OnDeleteClicked" />
</ContextMenu>
</StackPanel.ContextMenu>
</StackPanel>
And I need to get the instance of the StackPanel
that owns that ContextMenu
. I already tried this:
private void OnDeleteClicked(object sender, System.Windows.RoutedEventArgs e)
{
FrameworkElement parent = e.OriginalSource as FrameworkElement;
while (!(parent is StackPanel))
{
parent = (FrameworkElement)LogicalTreeHelper.GetParent(parent);
}
}
But after getting the ContextMenu
Popup parent, it gets null, same with the VisualTreeHelper
, it gets to null before getting the StackPanel
. Any idea on how to do this?
Thanks!
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.aspxthis will give you the exact thing you want
Hope this helps!!
the context menu has its own visual tree, try this calling this from your event handler like so :-