/////////////////////////////////////////////////////////////////////////////////////////////////////
        // NON-PUBLIC PROCEDURES
        /////////////////////////////////////////////////////////////////////////////////////////////////////

        /// <summary>
        /// Gets the first <see cref="ToolWindow"/> associated with the specified dock group.
        /// </summary>
        /// <param name="dockSite">The dock site to search.</param>
        /// <param name="dockGroup">The dock group.</param>
        /// <returns>
        /// A <see cref="ToolWindow"/>; otherwise, <see langword="null"/>.
        /// </returns>
        private static ToolWindow GetToolWindow(DockSite dockSite, string dockGroup)
        {
            if (dockSite != null && !string.IsNullOrEmpty(dockGroup))
            {
                foreach (ToolWindow toolWindow in dockSite.ToolWindows)
                {
                    ToolItemViewModel toolItemViewModel = toolWindow.DataContext as ToolItemViewModel;
                    if (toolItemViewModel != null && toolItemViewModel.DockGroup == dockGroup)
                    {
                        return(toolWindow);
                    }
                }
            }

            return(null);
        }
 /// <summary>
 /// Opens the specified docking window.
 /// </summary>
 /// <param name="dockSite">The dock site that owns the docking window.</param>
 /// <param name="dockingWindow">The docking window to open.</param>
 private static void OpenDockingWindow(DockSite dockSite, DockingWindow dockingWindow)
 {
     if (!dockingWindow.IsOpen)
     {
         if (dockingWindow is DocumentWindow)
         {
             dockingWindow.Open();
         }
         else
         {
             ToolWindow        toolWindow        = dockingWindow as ToolWindow;
             ToolItemViewModel toolItemViewModel = dockingWindow.DataContext as ToolItemViewModel;
             if (toolWindow != null && toolItemViewModel != null)
             {
                 // Look for a ToolWindow within the same group, if found then dock to that group, otherwise either dock or auto-hide the window
                 ToolWindow targetToolWindow = GetToolWindow(dockSite, toolItemViewModel.DockGroup);
                 if (targetToolWindow != null && !Equals(targetToolWindow, toolWindow))
                 {
                     toolWindow.Dock(targetToolWindow, Direction.Content);
                 }
                 else if (toolItemViewModel.IsInitiallyHidden)
                 {
                     toolWindow.AutoHide(toolItemViewModel.DefaultDock);
                 }
                 else
                 {
                     toolWindow.Dock(dockSite, toolItemViewModel.DefaultDock);
                 }
             }
             else
             {
                 dockingWindow.Open();
             }
         }
     }
 }