/// <summary>
        ///		Añade / selecciona un panel
        /// </summary>
        public void AddPane(string id, string header, UserControl control, object tag = null, DockPosition position = DockPosition.Bottom)
        {
            DockLayoutDocument previous = GetDocument(id);

            if (previous != null)
            {
                previous.LayoutContent.IsActive = true;
                ActiveDocument = previous;
            }
            else
            {
                LayoutAnchorGroup layoutGroup = GetGroupPane(Layout, position);
                LayoutAnchorable  layoutPane  = new LayoutAnchorable {
                    Title = header, ToolTip = header
                };

                // Añade el contenido
                layoutPane.Content   = control;
                layoutPane.ContentId = id;
                // Añade el contenido al grupo
                layoutGroup.Children.Add(layoutPane);
                layoutPane.IsActive  = true;
                layoutPane.IsVisible = true;
                // Asigna los parámetros del grupo
                layoutPane.FloatingHeight = 400;
                layoutPane.FloatingWidth  = 400;
                // Añade el panel a la lista de documentos del controlador
                AddDocument(id, header, DockLayoutDocument.DocumentType.Panel, layoutPane, control, tag);
            }
        }
 /// <summary>
 ///		Lanza el evento de cambio de documento
 /// </summary>
 private void RaiseEventChangeDocument(DockLayoutDocument document)
 {
     if (document != null && (document.LayoutContent?.IsActive ?? false))
     {
         ActiveDocumentChanged?.Invoke(this, EventArgs.Empty);
     }
 }
        /// <summary>
        ///		Añade / selecciona un documento
        /// </summary>
        public void AddDocument(string id, string header, UserControl control, object tag = null)
        {
            DockLayoutDocument previous = GetDocument(id);

            if (previous != null)
            {
                previous.LayoutContent.IsActive = true;
                ActiveDocument = previous;
            }
            else
            {
                LayoutDocumentPane documentPane   = Layout.Descendents().OfType <LayoutDocumentPane>().FirstOrDefault();
                LayoutDocument     layoutDocument = new LayoutDocument {
                    Title = header, ToolTip = header
                };

                // Crea un documento y le asigna el control de contenido
                if (documentPane != null)
                {
                    // Asigna el control
                    layoutDocument.Content   = control;
                    layoutDocument.ContentId = id;
                    // Añade el nuevo LayoutDocument al array existente
                    documentPane.Children.Add(layoutDocument);
                    // Activa el documento
                    layoutDocument.IsActive   = true;
                    layoutDocument.IsSelected = true;
                    // Cambia el foco al control
                    control.Focus();
                    // Añade el documento al controlador
                    AddDocument(id, header, DockLayoutDocument.DocumentType.Document, layoutDocument, control, tag);
                }
            }
        }
        /// <summary>
        ///		Añade un documento al control o lo selecciona
        /// </summary>
        private void AddDocument(string id, string header, DockLayoutDocument.DocumentType type,
                                 LayoutContent layoutContent, UserControl userControl, object tag = null)
        {
            DockLayoutDocument document = new DockLayoutDocument(id, header, type, layoutContent, userControl, tag);

            // Añade el documento al diccionario
            Documents.Add(document.Id, document);
            // Asigna los manejadores de evento a la vista
            layoutContent.Closing         += (sender, args) => args.Cancel = !TreatEventCloseForm(document);
            layoutContent.IsActiveChanged += (sender, args) => RaiseEventChangeDocument(document);
            // Activa el documento
            document.LayoutContent.IsActive = true;
            ActiveDocument = document;
        }
        /// <summary>
        ///		Trata el evento de cierre de un documento
        /// </summary>
        private bool TreatEventCloseForm(DockLayoutDocument document)
        {
            bool canClose = true;

            // Si es un documento, antes de cerrar se pregunta a la ventana principal
            if (document.Type == DockLayoutDocument.DocumentType.Document)
            {
                ClosingEventArgs args = new ClosingEventArgs(document);

                // Llama al manejador de eventos
                Closing?.Invoke(this, args);
                // Si no se ha cancelado, se puede cerrar
                canClose = !args.Cancel;
            }
            // Si se debe cerrar, se quita del diccionario
            if (canClose && Documents.ContainsKey(document.Id))
            {
                Documents.Remove(document.Id);
            }
            // Devuelve el valor que indica si se puede cerrar el documento
            return(canClose);
        }
 public ClosingEventArgs(DockLayoutDocument document)
 {
     Document = document;
 }