From e9140a28b86bbd9616ef97b588a16557766158f0 Mon Sep 17 00:00:00 2001 From: Ashish Aggarwal Date: Wed, 11 Jun 2025 16:11:36 -0400 Subject: [PATCH 1/4] fix context menu --- src/DynamoCoreWpf/Views/Core/NodeView.xaml.cs | 46 +++++++++---------- 1 file changed, 22 insertions(+), 24 deletions(-) diff --git a/src/DynamoCoreWpf/Views/Core/NodeView.xaml.cs b/src/DynamoCoreWpf/Views/Core/NodeView.xaml.cs index c5c2328df56..54c50d11dde 100644 --- a/src/DynamoCoreWpf/Views/Core/NodeView.xaml.cs +++ b/src/DynamoCoreWpf/Views/Core/NodeView.xaml.cs @@ -216,7 +216,7 @@ internal Grid centralGrid } //View items referenced outside of NodeView as previously from xaml outside of DynamoCoreWPF - public ContextMenu MainContextMenu = new ContextMenu(); + public ContextMenu MainContextMenu = GetNodeContextMenu(); public Grid grid; private Grid _presentationGrid = null; @@ -290,7 +290,7 @@ public Grid PresentationGrid private static Style _nodeButtonStyle = GetNodeButtonStyle(); private static Style _codeBlockNodeItemControlStyle = GetCodeBlockPortItemControlStyle(); internal static readonly Style DynamoToolTipTopStyle = GetDynamoToolTipTopStyle(); - private static ContextMenu nodeContextMenu = GetNodeContextMenu(); + //private static ContextMenu nodeContextMenu = GetNodeContextMenu(); #region constructors static NodeView() @@ -2324,18 +2324,21 @@ internal void TogglePreviewControlAllowance() /// private void StashNodeViewCustomizationMenuItems() { - foreach (var obj in grid.ContextMenu.Items) + if (MainContextMenu != null && MainContextMenu.Items.Count > 0 && NodeViewCustomizationMenuItems.Count < 1) { - 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 +2363,25 @@ private void DisplayNodeContextMenu(object sender, RoutedEventArgs e) ViewModel.DynamoViewModel.ExecuteCommand( new DynCmd.SelectModelCommand(nodeGuid, Keyboard.Modifiers.AsDynamoType())); - var contextMenu = grid.ContextMenu; + var contextMenu = MainContextMenu; - // 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(); - nodeContextMenu.Items.Clear(); - NodeContextMenuBuilder.Build(nodeContextMenu, viewModel, NodeViewCustomizationMenuItems); - - nodeContextMenu.DataContext = viewModel; - nodeContextMenu.Closed += MainContextMenu_OnClosed; - nodeContextMenu.IsOpen = true; + MainContextMenu.Items.Clear(); + NodeContextMenuBuilder.Build(MainContextMenu, viewModel, NodeViewCustomizationMenuItems); + 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; } From e13dd80ab998f8e6e810fe4ba0fcf897e2446d91 Mon Sep 17 00:00:00 2001 From: Ashish Aggarwal Date: Wed, 11 Jun 2025 17:17:03 -0400 Subject: [PATCH 2/4] Update NodeView.xaml.cs --- src/DynamoCoreWpf/Views/Core/NodeView.xaml.cs | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/src/DynamoCoreWpf/Views/Core/NodeView.xaml.cs b/src/DynamoCoreWpf/Views/Core/NodeView.xaml.cs index 54c50d11dde..70aa3f3bcf7 100644 --- a/src/DynamoCoreWpf/Views/Core/NodeView.xaml.cs +++ b/src/DynamoCoreWpf/Views/Core/NodeView.xaml.cs @@ -216,7 +216,7 @@ internal Grid centralGrid } //View items referenced outside of NodeView as previously from xaml outside of DynamoCoreWPF - public ContextMenu MainContextMenu = GetNodeContextMenu(); + public ContextMenu MainContextMenu = new ContextMenu(); public Grid grid; private Grid _presentationGrid = null; @@ -290,7 +290,7 @@ public Grid PresentationGrid private static Style _nodeButtonStyle = GetNodeButtonStyle(); private static Style _codeBlockNodeItemControlStyle = GetCodeBlockPortItemControlStyle(); internal static readonly Style DynamoToolTipTopStyle = GetDynamoToolTipTopStyle(); - //private static ContextMenu nodeContextMenu = GetNodeContextMenu(); + private static ContextMenu nodeContextMenu = GetNodeContextMenu(); #region constructors static NodeView() @@ -2363,15 +2363,14 @@ private void DisplayNodeContextMenu(object sender, RoutedEventArgs e) ViewModel.DynamoViewModel.ExecuteCommand( new DynCmd.SelectModelCommand(nodeGuid, Keyboard.Modifiers.AsDynamoType())); - var contextMenu = MainContextMenu; - StashNodeViewCustomizationMenuItems(); // Clearing any existing items in the node's ContextMenu. - contextMenu.Items.Clear(); MainContextMenu.Items.Clear(); - NodeContextMenuBuilder.Build(MainContextMenu, viewModel, NodeViewCustomizationMenuItems); + nodeContextMenu.Items.Clear(); + NodeContextMenuBuilder.Build(nodeContextMenu, viewModel, NodeViewCustomizationMenuItems); + MainContextMenu = nodeContextMenu; MainContextMenu.DataContext = viewModel; MainContextMenu.Closed += MainContextMenu_OnClosed; MainContextMenu.IsOpen = true; @@ -2382,6 +2381,7 @@ private void MainContextMenu_OnClosed(object sender, RoutedEventArgs e) { MainContextMenu.Closed -= MainContextMenu_OnClosed; MainContextMenu.Items.Clear(); + nodeContextMenu.Items.Clear(); e.Handled = true; } From 63f80f3c12623103a2b80250fbe2cac011de268b Mon Sep 17 00:00:00 2001 From: Ashish Aggarwal Date: Thu, 12 Jun 2025 12:00:03 -0400 Subject: [PATCH 3/4] Update NodeView.xaml.cs --- src/DynamoCoreWpf/Views/Core/NodeView.xaml.cs | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/DynamoCoreWpf/Views/Core/NodeView.xaml.cs b/src/DynamoCoreWpf/Views/Core/NodeView.xaml.cs index 70aa3f3bcf7..cd96556f885 100644 --- a/src/DynamoCoreWpf/Views/Core/NodeView.xaml.cs +++ b/src/DynamoCoreWpf/Views/Core/NodeView.xaml.cs @@ -2324,7 +2324,7 @@ internal void TogglePreviewControlAllowance() /// private void StashNodeViewCustomizationMenuItems() { - if (MainContextMenu != null && MainContextMenu.Items.Count > 0 && NodeViewCustomizationMenuItems.Count < 1) + if (MainContextMenu != null && MainContextMenu.Items.Count > 0 && NodeViewCustomizationMenuItems.Count == 0) { foreach (var obj in MainContextMenu.Items) { @@ -2381,7 +2381,6 @@ private void MainContextMenu_OnClosed(object sender, RoutedEventArgs e) { MainContextMenu.Closed -= MainContextMenu_OnClosed; MainContextMenu.Items.Clear(); - nodeContextMenu.Items.Clear(); e.Handled = true; } From 72de936ec0c385dec7bb885aac661201c2424cf5 Mon Sep 17 00:00:00 2001 From: Ashish Aggarwal Date: Tue, 17 Jun 2025 17:29:09 -0400 Subject: [PATCH 4/4] Update NodeView.xaml.cs --- src/DynamoCoreWpf/Views/Core/NodeView.xaml.cs | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/DynamoCoreWpf/Views/Core/NodeView.xaml.cs b/src/DynamoCoreWpf/Views/Core/NodeView.xaml.cs index cd96556f885..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 @@ -2371,6 +2372,7 @@ private void DisplayNodeContextMenu(object sender, RoutedEventArgs e) NodeContextMenuBuilder.Build(nodeContextMenu, viewModel, NodeViewCustomizationMenuItems); MainContextMenu = nodeContextMenu; + grid.ContextMenu = MainContextMenu; MainContextMenu.DataContext = viewModel; MainContextMenu.Closed += MainContextMenu_OnClosed; MainContextMenu.IsOpen = true;