BaseView.CustomDocumentsHostWindow Event
Allows you to replace the default container for floating documents. Handle this event only when the BaseView.FloatingDocumentContainer property equals DocumentsHost.
Namespace: DevExpress.XtraBars.Docking2010.Views
Assembly: DevExpress.XtraBars.v24.1.dll
NuGet Package: DevExpress.Win.Navigation
Declaration
Event Data
The CustomDocumentsHostWindow event's data class is DevExpress.XtraBars.Docking2010.CustomDocumentsHostWindowEventArgs.
Remarks
If the FloatingDocumentContainer property equals DocumentsHost
, each floating document is hosted inside a container that accepts other documents. At runtime, users can dock one floating document to another.
In this setup, floating documents are managed by Document Managers inside document containers - rather than by their source Document Manager. If you need to handle events related to floating documents, create a custom container with a Document Manager that handles all required events.
- Right-click your project in Visual Studio Solution Explorer, and click “Add | New Item”. Add a new class that inherits from
Form
and implements theIDocumentHostWindows
interface.
- Add a Document Manager component to your custom container, and subscribe to required events. In this sample, a Document Manager that operates floating documents handles the BaseView.DocumentClosing event.
using DevExpress.XtraBars.Docking2010; using DevExpress.XtraBars.Docking2010.Views; namespace myApp { class customDocHost : Form, IDocumentsHostWindow { DocumentManager floatDocHost; public customDocHost() { floatDocHost = new DocumentManager(); floatDocHost.ContainerControl = this; //replace the previous code line with the following if main //Document Manager uses the MdiParent property //floatDocHost.MdiParent = this; floatDocHost.View.DocumentClosing += View_DocumentClosing; floatDocHost.View.FloatingDocumentContainer = FloatingDocumentContainer.DocumentsHost; } void View_DocumentClosing(object sender, DocumentCancelEventArgs e) { //do something } public bool DestroyOnRemovingChildren { get { return true; } } public DocumentManager DocumentManager { get { return floatDocHost; } } protected override void Dispose(bool disposing) { if (disposing) floatDocHost.Dispose(); base.Dispose(disposing); } } }
- Handle the main DocumentManager CustomDocumentsHostWindow event and replace the default floating document container with your custom class instance.
using DevExpress.XtraBars.Docking2010; using DevExpress.XtraBars.Docking2010.Views; namespace myApp { public partial class Form1 : Form { public Form1() { InitializeComponent(); documentManager1.View.CustomDocumentsHostWindow += View_CustomDocumentsHostWindow; documentManager1.View.FloatingDocumentContainer = FloatingDocumentContainer.DocumentsHost; } void View_CustomDocumentsHostWindow(object sender, CustomDocumentsHostWindowEventArgs e) { e.Constructor = new DocumentsHostWindowConstructor(CreateCustomHost); } private customDocHost CreateCustomHost() { return new customDocHost(); } } }
- All documents undocked from the main Document Manager are now inside custom containers with their own Document Managers. However,
FloatingDocumentContainer
properties of these custom Document Managers are also equal toDocumentsHost
(see step #2). If a user undocks a document from a custom container, this document will be placed into another default container. To fix this, ensure that instances of your class are custom containers of other custom containers.
Repeat step #3 for the custom container class.