C# 如何强制加载上下文菜单?
我有一个wpf应用程序,其中有一个TreeView。 树视图有一个上下文菜单。 只有在右键单击其中一个TreeViewItem后,关联菜单才会开始加载。 (我是如何知道的-我在上下文菜单的加载事件中添加了一个日志。一旦我单击其中一个TreeView项,它就会写入日志消息。 这导致的问题是,上下文菜单在第一次被单击时似乎不起作用。实际上,第一次加载只需要时间。) 由于加载需要一两分钟,我希望在应用程序启动后立即开始加载。C# 如何强制加载上下文菜单?,c#,wpf,treeview,contextmenu,treeviewitem,C#,Wpf,Treeview,Contextmenu,Treeviewitem,我有一个wpf应用程序,其中有一个TreeView。 树视图有一个上下文菜单。 只有在右键单击其中一个TreeViewItem后,关联菜单才会开始加载。 (我是如何知道的-我在上下文菜单的加载事件中添加了一个日志。一旦我单击其中一个TreeView项,它就会写入日志消息。 这导致的问题是,上下文菜单在第一次被单击时似乎不起作用。实际上,第一次加载只需要时间。) 由于加载需要一两分钟,我希望在应用程序启动后立即开始加载。 上下文菜单没有“加载”操作。有什么办法可以做到这一点吗?为您的上下文菜单创建
上下文菜单没有“加载”操作。有什么办法可以做到这一点吗?为您的
上下文菜单创建一种样式,如下所示
<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>
根据树状视图中选定的项目更改上下文菜单
项目资源
为上下文菜单创建样式,如下所示
<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>
更改上下文菜单
项资源
基于树视图的选定项
上下文菜单项绑定到数据上下文中的内部属性(例如,如果我有一个名为Manager的属性,它有一个名为MenuItems的属性,它就绑定到Manager.MenuItems)。
内部属性只有一个get属性,当调用它时,它将计算可观察的菜单项集合。
因此,为了解决我的问题,我签署了TreeView的Loaded事件,并在那里运行了所有第一层次的TreeView项,每一个都是:
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
第四行是在加载前计算菜单项。
最后两行必须放在一起,因为某种原因,如果没有一行就不行了。
希望这对某人有所帮助上下文菜单项绑定到数据上下文中的一个内部属性(例如,如果我有一个名为Manager的属性,它有一个名为MenuItems的属性,它绑定到Manager.MenuItems)。
内部属性只有一个get属性,当调用它时,它将计算可观察的菜单项集合。
因此,为了解决我的问题,我签署了TreeView的Loaded事件,并在那里运行了所有第一层次的TreeView项,每一个都是:
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
第四行是在加载前计算菜单项。
最后两行必须放在一起,因为某种原因,如果没有一行就不行了。
希望这对某人有所帮助它有一个ItemContainerStyle和一个基于所选内容的ItemsSource。它在启动时仍然不加载项目源在启动时是否有任何项目??它有一个ItemContainerStyle和一个基于所选内容的ItemsSource。启动时仍不加载项目源在启动时是否有任何项目??