首页 > 解决方案 > 如何在展开菜单之前让 menuitem 的 Adornerlayer 不为空

问题描述

以下代码片段给了我 null adornerLayer

  Menu menu = (Menu)this.FindName("Menu");
  MenuItem menuItem = (MenuItem) menu.Items.GetItemAt(0);

  MenuItem subMenuItem = (MenuItem) menuItem.Items.GetItemAt(1);

  var layer = AdornerLayer.GetAdornerLayer(subMenuItem);
  layer.Add(new SimpleCircleAdorner(subMenuItem));

如果我要添加行:

menuItem.IsSubmenuOpen = true

菜单以编程方式展开,并且装饰层不为空。

是否有可能为未扩展的菜单获取非空装饰器?(第一次)

Edit1:好的,似乎在菜单打开之前没有创建视觉树。我仍然不确定如何以编程方式触发可视化树的创建。

标签: c#wpfuser-interfacemenu

解决方案


在展开菜单之前,我没有找到返回非空装饰层的解决方案。

因此,当特定菜单项的可见性发生更改时,我引入了回调。

当菜单展开时,可见性发生了变化,我可以获得非空的 Adorner。


推荐阅读