Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Wpf 打开时获取子菜单弹出窗口?_Wpf - Fatal编程技术网

Wpf 打开时获取子菜单弹出窗口?

Wpf 打开时获取子菜单弹出窗口?,wpf,Wpf,在我的xaml中有一个MenuItem的树,当打开一个新级别时,我需要获得单独的可视树。我正在订阅事件菜单项。子菜单openedevent,但这只会给我一个已单击的特定菜单项的引用。我还需要一个新的可视化树根的引用。有什么建议吗 在应用程序的任何地方创建新的可视树时,任何获得它们的方法都是非常好的 我尝试提取各种私有成员,例如MenuItem.\u子菜单popup和Application.NonAppWindowsInternal,但结果都是null/空的。不走运。子菜单openedevent有

在我的xaml中有一个
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
(一个内部类)。弹出窗口的内容是弹出窗口根目录的可视子目录。