我有这样的ContextMenu
:
<StackPanel Orientation="Horizontal">
<StackPanel.ContextMenu>
<ContextMenu>
<MenuItem Header="Delete" Click="OnDeleteClicked" />
</ContextMenu>
</StackPanel.ContextMenu>
</StackPanel>
我需要获取拥有该
StackPanel
的ContextMenu
的实例。我已经尝试过了:private void OnDeleteClicked(object sender, System.Windows.RoutedEventArgs e)
{
FrameworkElement parent = e.OriginalSource as FrameworkElement;
while (!(parent is StackPanel))
{
parent = (FrameworkElement)LogicalTreeHelper.GetParent(parent);
}
}
但是,在获得
ContextMenu
Popup父级后,它变为null,与VisualTreeHelper
相同,在获得StackPanel
之前,它变为null。有关如何执行此操作的任何想法?谢谢!
最佳答案
这会给你你想要的确切的东西
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;
}
}
希望这可以帮助!!
关于wpf - 在代码中获取上下文菜单的所有者,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1884117/