Wpf 打开时获取子菜单弹出窗口?
在我的xaml中有一个Wpf 打开时获取子菜单弹出窗口?,wpf,Wpf,在我的xaml中有一个MenuItem的树,当打开一个新级别时,我需要获得单独的可视树。我正在订阅事件菜单项。子菜单openedevent,但这只会给我一个已单击的特定菜单项的引用。我还需要一个新的可视化树根的引用。有什么建议吗 在应用程序的任何地方创建新的可视树时,任何获得它们的方法都是非常好的 我尝试提取各种私有成员,例如MenuItem.\u子菜单popup和Application.NonAppWindowsInternal,但结果都是null/空的。不走运。子菜单openedevent有
MenuItem
的树,当打开一个新级别时,我需要获得单独的可视树。我正在订阅事件菜单项。子菜单openedevent
,但这只会给我一个已单击的特定菜单项的引用。我还需要一个新的可视化树根的引用。有什么建议吗
在应用程序的任何地方创建新的可视树时,任何获得它们的方法都是非常好的
我尝试提取各种私有成员,例如MenuItem.\u子菜单popup
和Application.NonAppWindowsInternal
,但结果都是null/空的。不走运。子菜单openedevent
有点用词不当,因为在启动时,子菜单实际上还没有加载到可视化树中。因此,它实际上并没有在这个词最有意义的意义上“打开”
要在打开子菜单时收到通知,您可以订阅MenuItem.Loaded
。您可以提前执行此操作,但我可能会在引发子菜单openedevent
时按需执行此操作:
private void OnMenuItemSubmenuOpened(object sender, RoutedEventArgs e)
{
var menuItem = (MenuItem)sender;
var anyChild = menuItem.Items.OfType<FrameworkElement>().FirstOrDefault();
if (anyChild != null)
{
var handler = default(RoutedEventHandler);
handler = (o, args) =>
{
anyChild.Loaded -= handler;
var popup = anyChild?.FindPopup();
// Do something with the Popup.
};
anyChild.Loaded += handler;
}
}
子菜单openedevent
有点用词不当,因为在提升它时,子菜单实际上还没有加载到可视化树中。因此,它实际上并没有在这个词最有意义的意义上“打开”
要在打开子菜单时收到通知,您可以订阅MenuItem.Loaded
。您可以提前执行此操作,但我可能会在引发子菜单openedevent
时按需执行此操作:
private void OnMenuItemSubmenuOpened(object sender, RoutedEventArgs e)
{
var menuItem = (MenuItem)sender;
var anyChild = menuItem.Items.OfType<FrameworkElement>().FirstOrDefault();
if (anyChild != null)
{
var handler = default(RoutedEventHandler);
handler = (o, args) =>
{
anyChild.Loaded -= handler;
var popup = anyChild?.FindPopup();
// Do something with the Popup.
};
anyChild.Loaded += handler;
}
}
最后,谢谢!但是弹出窗口并不是我想要的结果。它没有任何可视的子对象(我下一步想要的)。但是仅仅获得可视根就足够了。
Popup
没有可视子级:它有一个逻辑子级,而该子级就是popuroot
(一个内部类)。弹出窗口的内容是弹出窗口根目录的可视子目录。最后,谢谢!但是弹出窗口并不是我想要的结果。它没有任何可视的子对象(我下一步想要的)。但是仅仅获得可视根就足够了。Popup
没有可视子级:它有一个逻辑子级,而该子级就是popuroot
(一个内部类)。弹出窗口的内容是弹出窗口根目录的可视子目录。