diff --git a/src/DynamoCoreWpf/Views/Core/NodeView.xaml.cs b/src/DynamoCoreWpf/Views/Core/NodeView.xaml.cs index c5c2328df56..5a2d7c14d46 100644 --- a/src/DynamoCoreWpf/Views/Core/NodeView.xaml.cs +++ b/src/DynamoCoreWpf/Views/Core/NodeView.xaml.cs @@ -290,6 +290,7 @@ public Grid PresentationGrid private static Style _nodeButtonStyle = GetNodeButtonStyle(); private static Style _codeBlockNodeItemControlStyle = GetCodeBlockPortItemControlStyle(); internal static readonly Style DynamoToolTipTopStyle = GetDynamoToolTipTopStyle(); + // Initiate context menu style as static resource. private static ContextMenu nodeContextMenu = GetNodeContextMenu(); #region constructors @@ -2324,18 +2325,21 @@ internal void TogglePreviewControlAllowance() /// private void StashNodeViewCustomizationMenuItems() { - foreach (var obj in grid.ContextMenu.Items) + if (MainContextMenu != null && MainContextMenu.Items.Count > 0 && NodeViewCustomizationMenuItems.Count == 0) { - if (!(obj is MenuItem menuItem)) continue; + foreach (var obj in MainContextMenu.Items) + { + if (!(obj is MenuItem menuItem)) continue; - // We don't stash default MenuItems, such as 'Freeze'. - if (NodeContextMenuBuilder.NodeContextMenuDefaultItemNames.Contains(menuItem.Header.ToString())) continue; + // We don't stash default MenuItems, such as 'Freeze'. + if (NodeContextMenuBuilder.NodeContextMenuDefaultItemNames.Contains(menuItem.Header.ToString())) continue; - // We don't stash the same MenuItem multiple times. - if (NodeViewCustomizationMenuItems.Contains(menuItem.Header.ToString())) continue; + // We don't stash the same MenuItem multiple times. + if (NodeViewCustomizationMenuItems.Contains(menuItem.Header.ToString())) continue; - // The MenuItem gets stashed. - NodeViewCustomizationMenuItems.Add(menuItem.Header.ToString(), menuItem); + // The MenuItem gets stashed. + NodeViewCustomizationMenuItems.Add(menuItem.Header.ToString(), menuItem); + } } } @@ -2360,30 +2364,25 @@ private void DisplayNodeContextMenu(object sender, RoutedEventArgs e) ViewModel.DynamoViewModel.ExecuteCommand( new DynCmd.SelectModelCommand(nodeGuid, Keyboard.Modifiers.AsDynamoType())); - var contextMenu = grid.ContextMenu; - - // Stashing any injected MenuItems from the Node View Customization process. - if (contextMenu.Items.Count > 0 && NodeViewCustomizationMenuItems.Count < 1) - { - StashNodeViewCustomizationMenuItems(); - } + StashNodeViewCustomizationMenuItems(); // Clearing any existing items in the node's ContextMenu. - contextMenu.Items.Clear(); + MainContextMenu.Items.Clear(); nodeContextMenu.Items.Clear(); NodeContextMenuBuilder.Build(nodeContextMenu, viewModel, NodeViewCustomizationMenuItems); - nodeContextMenu.DataContext = viewModel; - nodeContextMenu.Closed += MainContextMenu_OnClosed; - nodeContextMenu.IsOpen = true; - + MainContextMenu = nodeContextMenu; + grid.ContextMenu = MainContextMenu; + MainContextMenu.DataContext = viewModel; + MainContextMenu.Closed += MainContextMenu_OnClosed; + MainContextMenu.IsOpen = true; e.Handled = true; } private void MainContextMenu_OnClosed(object sender, RoutedEventArgs e) { - nodeContextMenu.Closed -= MainContextMenu_OnClosed; - nodeContextMenu.Items.Clear(); + MainContextMenu.Closed -= MainContextMenu_OnClosed; + MainContextMenu.Items.Clear(); e.Handled = true; }