在代码中获取上下文菜单的所有者
我有一个像这样的 ContextMenu:
<StackPanel Orientation="Horizontal">
<StackPanel.ContextMenu>
<ContextMenu>
<MenuItem Header="Delete" Click="OnDeleteClicked" />
</ContextMenu>
</StackPanel.ContextMenu>
</StackPanel>
我需要获取拥有该 ContextMenu 的 StackPanel 实例。我已经尝试过这个:
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 >。关于如何做到这一点有什么想法吗?
谢谢!
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!
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
这会给你你想要的东西
希望这有帮助!
this will give you the exact thing you want
Hope this helps!!
ContextMenus 和 Popups 的可视化树的工作方式略有不同。您可以使用 ContextMenu.PlacementTarget 来获取 StackPanel。 MSDN 上提供了更多信息:http://msdn.microsoft .com/en-us/library/system.windows.controls.contextmenu.placementtarget.aspx
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 :-