C# WPF中的弹出窗口立即失去焦点并关闭

C# WPF中的弹出窗口立即失去焦点并关闭,c#,wpf,contextmenu,lost-focus,C#,Wpf,Contextmenu,Lost Focus,我一直在为WPF弹出问题绞尽脑汁,希望有人能帮助我: 大纲是这样的: 我们的应用程序存储一个UIObjects列表——这些表示通过成员UIRenderObject在三维视口中显示的元素,UIRenderObject只是一个平面正方形网格,上面有位图,并通过成员treeview在树视图中显示 无论哪种情况,当对象检测到右键单击时,它都会尝试打开弹出窗口。 这方面的代码非常简单: ContextMenu contextMenu = new ContextMenu(); //add content

我一直在为WPF弹出问题绞尽脑汁,希望有人能帮助我: 大纲是这样的:

我们的应用程序存储一个UIObjects列表——这些表示通过成员UIRenderObject在三维视口中显示的元素,UIRenderObject只是一个平面正方形网格,上面有位图,并通过成员treeview在树视图中显示

无论哪种情况,当对象检测到右键单击时,它都会尝试打开弹出窗口。 这方面的代码非常简单:

ContextMenu contextMenu = new ContextMenu();

//add content

contextMenu.IsOpen = true;
当我在视口中单击时,一切都按预期进行-弹出窗口打开,并保持打开状态,直到失去焦点或进行选择。 但是,在树状视图中,弹出窗口会失去焦点并立即关闭

我尝试过显式设置焦点,显式设置PlacementTarget,在调用打开弹出窗口之前和之后将鼠标事件标记为已处理,将弹出窗口完全标记为StaysOpen,以及其他一些操作,但它仍然会立即关闭


任何帮助都将不胜感激。提前谢谢

这是ContextMenu的默认行为。或者,您可以使用Popup类而不是ContextMenu。然后,您可以根据需要扩展它

唉,原来我把事情复杂化了。 与其自己管理上下文菜单,不如简单地将其分配给TreeViewItem自己的上下文菜单,并让系统处理它,这是一条可行之路。 那会让我明白的。
感谢大家的输入:

是否有任何TreeView或TreeView项单击事件绑定到处理程序,如果有,这些处理程序在做什么?TreeView项上有左、右和中的单击处理程序,它们各自传递到UIObject来做自己的事情,然后为相应的鼠标按钮调用UIElement基处理程序。因此,在我的弹出窗口中使用“base.OnMouseRightButtonDown”。在UIObject的右键单击处理程序中,只需调用ShowContextMenu即可填充并打开弹出窗口。左键单击仅选择树状视图项。点击鼠标中键根本不起作用。我尝试过删除对base.OnMouseRightButtonDown的调用,只是将事件标记为已处理,但没有效果。真的吗?我觉得这很奇怪。如果它是一致的,那是一回事。但目前,在一种情况下,它可以像预期的那样工作,当从稍微不同的源通过相同的方法打开时,它会立即关闭。不过,我会看看我能用Popup类做些什么。谢谢