diff --git a/XplorePlane/Views/ImageProcessing/PipelineEditorView.xaml.cs b/XplorePlane/Views/ImageProcessing/PipelineEditorView.xaml.cs index 13867a4..5140a8d 100644 --- a/XplorePlane/Views/ImageProcessing/PipelineEditorView.xaml.cs +++ b/XplorePlane/Views/ImageProcessing/PipelineEditorView.xaml.cs @@ -59,6 +59,8 @@ namespace XplorePlane.Views PipelineListBox.PreviewMouseMove += OnPreviewMouseMove; PipelineListBox.PreviewMouseLeftButtonUp -= OnPreviewMouseLeftButtonUp; PipelineListBox.PreviewMouseLeftButtonUp += OnPreviewMouseLeftButtonUp; + PipelineListBox.MouseDoubleClick -= OnMouseDoubleClick; + PipelineListBox.MouseDoubleClick += OnMouseDoubleClick; PipelineListBox.PreviewKeyDown -= OnPreviewKeyDown; PipelineListBox.PreviewKeyDown += OnPreviewKeyDown; } @@ -103,7 +105,6 @@ namespace XplorePlane.Views private void OnPreviewMouseLeftButtonUp(object sender, MouseButtonEventArgs e) { - var vm = DataContext as IPipelineEditorHostViewModel; var clickedNode = FindNodeFromOriginalSource(e.OriginalSource); if (_isInternalDragging) @@ -119,19 +120,32 @@ namespace XplorePlane.Views return; } - if (vm == null || clickedNode == null || IsInteractiveChild(e.OriginalSource)) + if (clickedNode == null || IsInteractiveChild(e.OriginalSource)) { ResetDragState(); return; } + // 单击只选中,不切换启用状态 PipelineListBox.SelectedItem = clickedNode; PipelineListBox.Focus(); - vm.ToggleOperatorEnabledCommand.Execute(clickedNode); e.Handled = true; ResetDragState(); } + private void OnMouseDoubleClick(object sender, MouseButtonEventArgs e) + { + var vm = DataContext as IPipelineEditorHostViewModel; + var clickedNode = FindNodeFromOriginalSource(e.OriginalSource); + + if (vm == null || clickedNode == null || IsInteractiveChild(e.OriginalSource)) + return; + + // 双击切换启用/禁用 + vm.ToggleOperatorEnabledCommand.Execute(clickedNode); + e.Handled = true; + } + private void OnPreviewKeyDown(object sender, KeyEventArgs e) { if (e.Key != Key.Delete || DataContext is not IPipelineEditorHostViewModel vm || vm.SelectedNode == null)