如何强制加载上下文菜单?

How do I force a context menu to be loaded?

我有一个 wpf 应用程序,其中有一个 TreeView。 TreeView 有一个上下文菜单。 右键单击其中一个 TreeViewItems 后,上下文菜单才开始加载。 (我怎么知道的 - 我在上下文菜单的加载事件中添加了一个日志。一旦我点击其中一个 TreeViewItems,它就会写日志消息。 这导致的问题是,上下文菜单似乎在第一次被单击时不起作用。实际上第一次加载只需要时间。) 由于加载需要一两分钟,我希望它在应用程序启动后立即开始加载。 上下文菜单没有 "Load" 操作。有什么想法可以实现吗?

为您的 context menu 创建样式,如下所示,

 <ContextMenu ItemsSource="{Binding ContextActions}">                    
     <ContextMenu.ItemContainerStyle>
          <Style TargetType="{x:Type MenuItem}" >
                <Setter Property="Header" Value="{Binding Title}"/>
                <Setter Property="ToolTip" Value="{Binding ToolTips}"/>
                <Setter Property="Command" Value="{Binding ContextCommand}"/>
                <Setter Property="Icon" Value="{StaticResource Icon}"/>
                <Setter Property="CommandParameter" Value="{Binding CommandParameter}"/>
           </Style>
     </ContextMenu.ItemContainerStyle>
 </ContextMenu>

根据您选择的 tree view 项目更改 context menu ItemsSource

上下文菜单项绑定到数据上下文中的内部 属性(例如,如果我有一个名为 Manager 的 属性,它有一个名为 MenuItems 的 属性,它绑定到 Manager.MenuItems)。 内部的 属性 只有一个 get 属性 ,当调用它时,它会计算可观察的菜单项集合。 所以我做了什么来解决我的问题我签署了 TreeView 的 Loaded 事件并且我在所有第一个层次结构 TreeViewItems 上 运行,对于我所做的每个:

    item.IsSelected = true;
    item.Focus();
    item.IsOpen = true;
    var items = Manager.MenuItems; // Calculates the menu items (it's per item in my code so it doesn't look exactly the same

第四行是计算加载前的菜单项。 最后两行必须放在一起,出于某种原因,如果没有的话它就不起作用。 希望这对某人有帮助