private void EnableSingleSelection(bool enable) { GraphEditorInputMode mode = (GraphEditorInputMode)graphControl.InputMode; if (enable) { // remember old recognizer so we can restore it later oldMultiSelectionRecognizer = mode.MultiSelectionRecognizer; // disable marquee selection mode.MarqueeSelectionInputMode.Enabled = false; // disable multi selection with Ctrl-Click mode.MultiSelectionRecognizer = EventRecognizers.Never; // deactivate commands that can lead to multi selection mode.AvailableCommands.Remove(Commands.ToggleItemSelection); mode.AvailableCommands.Remove(Commands.SelectAll); mode.NavigationInputMode.AvailableCommands.Remove(Commands.ExtendSelectionLeft); mode.NavigationInputMode.AvailableCommands.Remove(Commands.ExtendSelectionUp); mode.NavigationInputMode.AvailableCommands.Remove(Commands.ExtendSelectionDown); mode.NavigationInputMode.AvailableCommands.Remove(Commands.ExtendSelectionRight); // add custom binding for toggle item selection toggleBindingOverride = mode.KeyboardInputMode.AddCommandBinding(Commands.ToggleItemSelection, ToggleItemSelectionExecuted, ToggleItemSelectionCanExecute); //Disable selection of (possibly multiple) items oldPasteItems = mode.PasteSelectableItems; mode.PasteSelectableItems = GraphItemTypes.None; //Also clear the selection - even though the setup works when more than one item is selected, it looks a bit strange graphControl.Selection.Clear(); } else { // restore old settings mode.MarqueeSelectionInputMode.Enabled = true; mode.MultiSelectionRecognizer = oldMultiSelectionRecognizer; mode.PasteSelectableItems = oldPasteItems; // re-activate commands mode.AvailableCommands.Add(Commands.ToggleItemSelection); mode.AvailableCommands.Add(Commands.SelectAll); mode.NavigationInputMode.AvailableCommands.Add(Commands.ExtendSelectionLeft); mode.NavigationInputMode.AvailableCommands.Add(Commands.ExtendSelectionUp); mode.NavigationInputMode.AvailableCommands.Add(Commands.ExtendSelectionDown); mode.NavigationInputMode.AvailableCommands.Add(Commands.ExtendSelectionRight); // remove custom binding for toggle item selection toggleBindingOverride.Remove(); toggleBindingOverride = null; } }
private void OnWindowLoaded(object sender, RoutedEventArgs e) { graphControl.Graph.NodeDefaults.Style = new ShinyPlateNodeStyle { Brush = Brushes.Orange }; var graphEditorInputMode = new GraphEditorInputMode(); graphControl.InputMode = graphEditorInputMode; oldPasteItems = graphEditorInputMode.PasteSelectableItems; EnableSingleSelection(true); LoadGraph(); graphControl.FitGraphBounds(); }
protected override void OnLoad(EventArgs e) { base.OnLoad(e); graphControl.Graph.NodeDefaults.Style = new ShinyPlateNodeStyle { Brush = Brushes.Orange }; var graphEditorInputMode = new GraphEditorInputMode(); graphControl.InputMode = graphEditorInputMode; oldPasteItems = graphEditorInputMode.PasteSelectableItems; EnableSingleSelection(true); LoadGraph(); graphControl.FitGraphBounds(); }
private void EnableSingleSelection(bool enable) { GraphEditorInputMode mode = (GraphEditorInputMode)graphControl.InputMode; if (enable) { // remember old recognizer so we can restore it later oldMultiSelectionRecognizer = mode.MultiSelectionRecognizer; // disable marquee selection mode.MarqueeSelectionInputMode.Enabled = false; // disable multi selection with Ctrl-Click mode.MultiSelectionRecognizer = EventRecognizers.Never; // deactivate commands that can lead to multi selection mode.AvailableCommands.Remove(GraphCommands.ToggleItemSelection); mode.AvailableCommands.Remove(ApplicationCommands.SelectAll); mode.NavigationInputMode.AvailableCommands.Remove(ComponentCommands.ExtendSelectionLeft); mode.NavigationInputMode.AvailableCommands.Remove(ComponentCommands.ExtendSelectionUp); mode.NavigationInputMode.AvailableCommands.Remove(ComponentCommands.ExtendSelectionDown); mode.NavigationInputMode.AvailableCommands.Remove(ComponentCommands.ExtendSelectionRight); // add dummy command bindings that do nothing in order to prevent WPF default behavior graphControl.CommandBindings.Add(extendSelectionLeftBinding); graphControl.CommandBindings.Add(extendSelectionRightBinding); graphControl.CommandBindings.Add(extendSelectionUpBinding); graphControl.CommandBindings.Add(extendSelectionDownBinding); // add custom binding for toggle item selection graphControl.CommandBindings.Add(customToggleSelectionBinding); //Disable selection of (possibly multiple) items oldPasteItems = mode.PasteSelectableItems; mode.PasteSelectableItems = GraphItemTypes.None; //Also clear the selection - even though the setup works when more than one item is selected, it looks a bit strange graphControl.Selection.Clear(); } else { // restore old settings mode.MarqueeSelectionInputMode.Enabled = true; mode.MultiSelectionRecognizer = oldMultiSelectionRecognizer; mode.PasteSelectableItems = oldPasteItems; // re-activate commands mode.AvailableCommands.Add(GraphCommands.ToggleItemSelection); mode.AvailableCommands.Add(ApplicationCommands.SelectAll); mode.NavigationInputMode.AvailableCommands.Add(ComponentCommands.ExtendSelectionLeft); mode.NavigationInputMode.AvailableCommands.Add(ComponentCommands.ExtendSelectionUp); mode.NavigationInputMode.AvailableCommands.Add(ComponentCommands.ExtendSelectionDown); mode.NavigationInputMode.AvailableCommands.Add(ComponentCommands.ExtendSelectionRight); graphControl.CommandBindings.Remove(extendSelectionLeftBinding); graphControl.CommandBindings.Remove(extendSelectionRightBinding); graphControl.CommandBindings.Remove(extendSelectionUpBinding); graphControl.CommandBindings.Remove(extendSelectionDownBinding); // remove custom binding for toggle item selection graphControl.CommandBindings.Remove(customToggleSelectionBinding); } }