wpf - 在代码中获取上下文菜单的所有者

标签 wpf contextmenu parent

我有这样的ContextMenu:

<StackPanel Orientation="Horizontal">
    <StackPanel.ContextMenu>
        <ContextMenu>
            <MenuItem Header="Delete" Click="OnDeleteClicked" />
        </ContextMenu>
    </StackPanel.ContextMenu>
</StackPanel>

我需要获取拥有该StackPanelContextMenu的实例。我已经尝试过了:
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/

相关文章:

wpf - 图表绘图点 - 在 OxyPlot 中显示工具提示

java - 使用箭头键控制连接到 TextField 的 JavaFX ContextMenu

swift - 在 Swift 中调用父函数

elasticsearch 2.0 父子孙子

javascript - 使用 jQuery 删除父元素

wpf - 命名空间中不存在新的 WPF 自定义控件库名称

c# - WPF DataGrid - 数据绑定(bind)到 CellTemplates DataTemplate 中的 DataTable 单元格

c# - LiveCharts 标记距离鼠标最近的点

jquery - 如何根据条件动态更改上下文菜单中的名称

左键单击 jQUEry 上下文菜单