void OnNewTabContentShownDelay(IDocumentTab documentTab) { var newNodes = documentTab.Content.Nodes.ToArray(); if (Equals(DocumentTreeView.TreeView.SelectedItems, newNodes)) { return; } // The treeview steals the focus so remember the current focused element. Don't restore // the focus if it's a node in the treeview. var focusedElem = Keyboard.FocusedElement; if (DocumentTreeView.TreeView.UIObject.IsKeyboardFocusWithin) { focusedElem = null; } bool tabGroupHasFocus = TabGroupService.TabGroups.Any(a => a.IsKeyboardFocusWithin); disableSelectionChangedEventCounter++; try { DocumentTreeView.TreeView.SelectItems(newNodes); } finally { disableSelectionChangedEventCounter--; } if (focusedElem != null && Keyboard.FocusedElement != focusedElem) { if (tabGroupHasFocus) { var tab = ActiveTabContentImpl; Debug.Assert(tab != null); if (tab != null) { tab.TrySetFocus(); } } else { wpfFocusService.Focus(focusedElem); } } }