private void UndoRedo(System.Windows.Controls.ListBox listBox, bool isUndo) { if (listBox == null) { return; } if (!this.isRecursion) { var parentButton = listBox.ParentOfType <RadRibbonSplitButton>(); if (parentButton != null && parentButton.IsOpen) { this.isRecursion = true; var startIndex = listBox.SelectedIndex; for (var i = 0; i <= startIndex; i++) { if (isUndo) { this.diagram.UndoRedoService.Undo(); } else { this.diagram.UndoRedoService.Redo(); } } this.isRecursion = false; parentButton.IsOpen = false; } } listBox.SelectedItem = null; }