/// <summary> /// Returns a context menu containing commands with commandTags</summary> /// <param name="commandTags">Command tags for commands to include on menu</param> /// <returns>ContextMenu</returns> public ContextMenu GetContextMenu(IEnumerable <object> commandTags) { m_commandService.SuggestRequery(); var menu = new ContextMenu(); menu.SetResourceReference(ContextMenu.StyleProperty, Resources.MenuStyleKey); //menu.Style = (Style)Application.Current.FindResource(Resources.MenuStyleKey); // Generate view model List <ICommandItem> commands = new List <ICommandItem>(); foreach (var tag in commandTags) { var command = m_commandService.GetCommand(tag); if (command != null) { if (!AutoCompact || ((ICommand)command).CanExecute(command)) { commands.Add(command); } } } commands.Sort(new CommandComparer()); var dummyRootMenu = new Sce.Atf.Wpf.Models.Menu(null, null, null, null, null); foreach (var command in commands) { MenuUtil.BuildSubMenus(command, dummyRootMenu); } MenuUtil.InsertGroupSeparators(dummyRootMenu); menu.ItemsSource = dummyRootMenu.ChildCollection; return(menu); }