syncfusion-wpf-tabbed-mdi-form

Compare original and translation side by side

🇺🇸

Original

English
🇨🇳

Translation

Chinese

Implementing Syncfusion WPF DocumentContainer

实现Syncfusion WPF DocumentContainer

The Syncfusion WPF DocumentContainer (Tabbed MDI Form) is a control for holding documents, controls, and panels within your application. It enables you to create both MDI (Multiple Document Interface) and TDI (Tabbed Document Interface) layouts, making it easy to build navigable applications similar to Visual Studio or modern IDE document management systems.
Syncfusion WPF DocumentContainer(选项卡式MDI表单)是一款用于在应用中承载文档、控件和面板的控件。它支持创建MDI(多文档界面)和TDI(选项卡式文档界面)两种布局,让你轻松构建类似Visual Studio或现代IDE的可导航文档管理应用。

When to Use This Skill

何时使用本技能

Use the DocumentContainer control when you need to:
  • Multi-document interfaces: Create applications that manage multiple documents simultaneously (like Visual Studio, Word, or Excel)
  • Tabbed interfaces: Implement tab-based navigation for documents and panels
  • MDI applications: Build traditional Multiple Document Interface applications with floating/resizable windows
  • TDI applications: Create modern Tabbed Document Interface applications with pinnable tabs
  • Document management: Handle multiple views, editors, or panels within a single application window
  • Window switching: Enable easy navigation between multiple documents using keyboard shortcuts (CTRL+TAB)
  • State persistence: Save and restore document layouts, positions, and states across application sessions
  • Professional layouts: Create applications with Visual Studio-style document management and window organization
在以下场景中使用DocumentContainer控件:
  • 多文档界面:创建可同时管理多个文档的应用(如Visual Studio、Word或Excel)
  • 选项卡式界面:为文档和面板实现基于选项卡的导航
  • MDI应用:构建带有浮动/可调整大小窗口的传统多文档界面应用
  • TDI应用:创建带有可固定选项卡的现代选项卡式文档界面应用
  • 文档管理:在单个应用窗口中处理多个视图、编辑器或面板
  • 窗口切换:通过键盘快捷键(CTRL+TAB)实现多个文档间的轻松导航
  • 状态持久化:在应用会话间保存和恢复文档布局、位置及状态
  • 专业布局:创建具有Visual Studio风格文档管理和窗口组织的应用

Component Overview

组件概述

Key Capabilities:
  • Dual mode support: TDI (Tabbed) and MDI (Multiple Document) interfaces
  • Five window switcher styles for navigation (Immediate, List, QuickTabs, VS2005, VistaFlip)
  • Window state management (minimize, maximize, resize)
  • Tab groups for organizing related documents
  • Pin/unpin tabs for persistent vs temporary documents
  • State persistence (Registry, XML, Binary, Isolated Storage)
  • Full screen mode support
  • Drag and drop customization
  • Keyboard navigation and shortcuts
  • Theme and skin support
Assembly Requirements:
  • Syncfusion.Tools.WPF
  • Syncfusion.Shared.WPF
核心功能:
  • 双模式支持:TDI(选项卡式)和MDI(多文档)界面
  • 五种窗口切换器样式用于导航(Immediate、List、QuickTabs、VS2005、VistaFlip)
  • 窗口状态管理(最小化、最大化、调整大小)
  • 用于组织相关文档的标签组
  • 固定/取消固定选项卡,区分持久化与临时文档
  • 状态持久化(注册表、XML、二进制、独立存储)
  • 全屏模式支持
  • 拖放自定义
  • 键盘导航和快捷键
  • 主题与皮肤支持
程序集要求:
  • Syncfusion.Tools.WPF
  • Syncfusion.Shared.WPF

Documentation and Navigation Guide

文档与导航指南

Getting Started

快速入门

📄 Read: references/getting-started.md
  • Assembly deployment and NuGet packages
  • Adding DocumentContainer via designer or code
  • Adding document windows to the container
  • Setting headers for documents
  • Basic TDI/MDI setup with complete examples
📄 阅读: references/getting-started.md
  • 程序集部署与NuGet包
  • 通过设计器或代码添加DocumentContainer
  • 向容器中添加文档窗口
  • 设置文档标题
  • 完整的基础TDI/MDI配置示例

Container Modes (TDI vs MDI)

容器模式(TDI vs MDI)

📄 Read: references/container-modes.md
  • Understanding TDI (Tabbed Document Interface)
  • Understanding MDI (Multiple Document Interface)
  • Setting the Mode property
  • When to use each mode
  • Switching between modes at runtime
  • Mode-specific features and behavior
📄 阅读: references/container-modes.md
  • 了解TDI(选项卡式文档界面)
  • 了解MDI(多文档界面)
  • 设置Mode属性
  • 不同模式的适用场景
  • 运行时切换模式
  • 各模式专属特性与行为

Window Management

窗口管理

📄 Read: references/window-management.md
  • Minimizing MDI windows (CanMDIMinimize property)
  • Maximizing MDI windows
  • Setting window states (Normal, Minimized, Maximized)
  • Resizing windows and setting MDI bounds
  • Keyboard-based window resizing
  • Window arrangement patterns
📄 阅读: references/window-management.md
  • MDI窗口最小化(CanMDIMinimize属性)
  • MDI窗口最大化
  • 设置窗口状态(正常、最小化、最大化)
  • 调整窗口大小与设置MDI边界
  • 基于键盘的窗口大小调整
  • 窗口排列模式

Tab Management

标签管理

📄 Read: references/tab-management.md
  • Adding and removing document items
  • Creating and organizing tab groups
  • Pin and unpin tabs
  • Tab navigation and ordering
  • Dynamic tab management
  • Items collection operations
📄 阅读: references/tab-management.md
  • 添加和移除文档项
  • 创建与组织标签组
  • 固定与取消固定选项卡
  • 标签导航与排序
  • 动态标签管理
  • 项集合操作

Window Switchers

窗口切换器

📄 Read: references/window-switchers.md
  • CTRL+TAB navigation overview
  • SwitchMode property and options
  • Immediate, List, QuickTabs modes
  • VS2005 and VistaFlip modes
  • Choosing the right switcher for your application
  • Keyboard shortcuts for window navigation
📄 阅读: references/window-switchers.md
  • CTRL+TAB导航概述
  • SwitchMode属性与选项
  • Immediate、List、QuickTabs模式
  • VS2005与VistaFlip模式
  • 为应用选择合适的切换器
  • 窗口导航的键盘快捷键

State Persistence

状态持久化

📄 Read: references/state-persistence.md
  • SaveDockState and LoadDockState methods
  • Saving to Registry (Binary/SOAP formatter)
  • Saving to Isolated Storage
  • Saving to XML files
  • Saving to Binary files
  • Resetting and deleting states
  • Best practices for state management
📄 阅读: references/state-persistence.md
  • SaveDockState与LoadDockState方法
  • 保存到注册表(二进制/SOAP格式化程序)
  • 保存到独立存储
  • 保存到XML文件
  • 保存到二进制文件
  • 重置与删除状态
  • 状态管理最佳实践

Customization and Styling

自定义与样式

📄 Read: references/customization.md
  • Setting document headers
  • Custom header templates
  • Theme and skin support
  • Visual customization options
  • Container appearance styling
  • Custom layouts
📄 阅读: references/customization.md
  • 设置文档标题
  • 自定义标题模板
  • 主题与皮肤支持
  • 视觉自定义选项
  • 容器外观样式设置
  • 自定义布局

Advanced Features

高级特性

📄 Read: references/advanced-features.md
  • Full screen mode
  • Disabling drag and drop
  • MDI window arrangement
  • Event handling
  • Integration with DockingManager
  • Performance optimization
  • Troubleshooting common issues
📄 阅读: references/advanced-features.md
  • 全屏模式
  • 禁用拖放
  • MDI窗口排列
  • 事件处理
  • 与DockingManager集成
  • 性能优化
  • 常见问题排查

Quick Start

快速开始示例

Basic TDI Implementation

基础TDI实现

xaml
<Window xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:syncfusion="http://schemas.syncfusion.com/wpf"
        Title="DocumentContainer Demo" Height="600" Width="800">
    <Grid>
        <!-- DocumentContainer in TDI mode -->
        <syncfusion:DocumentContainer x:Name="documentContainer" Mode="TDI">
            <!-- Document 1 -->
            <FlowDocumentScrollViewer syncfusion:DocumentContainer.Header="Document 1">
                <FlowDocument>
                    <Paragraph>Content of Document 1</Paragraph>
                </FlowDocument>
            </FlowDocumentScrollViewer>
            
            <!-- Document 2 -->
            <FlowDocumentScrollViewer syncfusion:DocumentContainer.Header="Document 2">
                <FlowDocument>
                    <Paragraph>Content of Document 2</Paragraph>
                </FlowDocument>
            </FlowDocumentScrollViewer>
            
            <!-- Document 3 -->
            <FlowDocumentScrollViewer syncfusion:DocumentContainer.Header="Document 3">
                <FlowDocument>
                    <Paragraph>Content of Document 3</Paragraph>
                </FlowDocument>
            </FlowDocumentScrollViewer>
        </syncfusion:DocumentContainer>
    </Grid>
</Window>
xaml
<Window xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:syncfusion="http://schemas.syncfusion.com/wpf"
        Title="DocumentContainer Demo" Height="600" Width="800">
    <Grid>
        <!-- DocumentContainer in TDI mode -->
        <syncfusion:DocumentContainer x:Name="documentContainer" Mode="TDI">
            <!-- Document 1 -->
            <FlowDocumentScrollViewer syncfusion:DocumentContainer.Header="Document 1">
                <FlowDocument>
                    <Paragraph>Content of Document 1</Paragraph>
                </FlowDocument>
            </FlowDocumentScrollViewer>
            
            <!-- Document 2 -->
            <FlowDocumentScrollViewer syncfusion:DocumentContainer.Header="Document 2">
                <FlowDocument>
                    <Paragraph>Content of Document 2</Paragraph>
                </FlowDocument>
            </FlowDocumentScrollViewer>
            
            <!-- Document 3 -->
            <FlowDocumentScrollViewer syncfusion:DocumentContainer.Header="Document 3">
                <FlowDocument>
                    <Paragraph>Content of Document 3</Paragraph>
                </FlowDocument>
            </FlowDocumentScrollViewer>
        </syncfusion:DocumentContainer>
    </Grid>
</Window>

Basic MDI Implementation (C#)

基础MDI实现(C#)

csharp
using Syncfusion.Windows.Tools.Controls;
using System.Windows;
using System.Windows.Controls;

namespace DocumentContainerDemo
{
    public partial class MainWindow : Window
    {
        public MainWindow()
        {
            InitializeComponent();
            
            // Create DocumentContainer in MDI mode
            DocumentContainer documentContainer = new DocumentContainer();
            documentContainer.Mode = DocumentContainerMode.MDI;
            documentContainer.SwitchMode = SwitchMode.VS2005;
            
            // Add document windows
            Button doc1 = new Button { Content = "Document 1 Content" };
            Button doc2 = new Button { Content = "Document 2 Content" };
            Button doc3 = new Button { Content = "Document 3 Content" };
            
            // Set headers
            DocumentContainer.SetHeader(doc1, "Document 1");
            DocumentContainer.SetHeader(doc2, "Document 2");
            DocumentContainer.SetHeader(doc3, "Document 3");
            
            // Add to container
            documentContainer.Items.Add(doc1);
            documentContainer.Items.Add(doc2);
            documentContainer.Items.Add(doc3);
            
            // Set as window content
            this.Content = documentContainer;
        }
    }
}
csharp
using Syncfusion.Windows.Tools.Controls;
using System.Windows;
using System.Windows.Controls;

namespace DocumentContainerDemo
{
    public partial class MainWindow : Window
    {
        public MainWindow()
        {
            InitializeComponent();
            
            // Create DocumentContainer in MDI mode
            DocumentContainer documentContainer = new DocumentContainer();
            documentContainer.Mode = DocumentContainerMode.MDI;
            documentContainer.SwitchMode = SwitchMode.VS2005;
            
            // Add document windows
            Button doc1 = new Button { Content = "Document 1 Content" };
            Button doc2 = new Button { Content = "Document 2 Content" };
            Button doc3 = new Button { Content = "Document 3 Content" };
            
            // Set headers
            DocumentContainer.SetHeader(doc1, "Document 1");
            DocumentContainer.SetHeader(doc2, "Document 2");
            DocumentContainer.SetHeader(doc3, "Document 3");
            
            // Add to container
            documentContainer.Items.Add(doc1);
            documentContainer.Items.Add(doc2);
            documentContainer.Items.Add(doc3);
            
            // Set as window content
            this.Content = documentContainer;
        }
    }
}

Common Patterns

常见模式

Pattern 1: TDI with QuickTabs Switcher

模式1:带有QuickTabs切换器的TDI

Ideal for modern tabbed applications with Visual Studio-style navigation.
xaml
<syncfusion:DocumentContainer Name="DocContainer" 
                              Mode="TDI" 
                              SwitchMode="QuickTabs">
    <!-- Add documents here -->
</syncfusion:DocumentContainer>
适用于具有Visual Studio风格导航的现代选项卡式应用。
xaml
<syncfusion:DocumentContainer Name="DocContainer" 
                              Mode="TDI" 
                              SwitchMode="QuickTabs">
    <!-- Add documents here -->
</syncfusion:DocumentContainer>

Pattern 2: MDI with Window Management

模式2:带有窗口管理的MDI

Enable minimize, maximize, and resize for traditional MDI applications.
xaml
<syncfusion:DocumentContainer Name="DocContainer" 
                              Mode="MDI" 
                              CanMDIMinimize="True"
                              SwitchMode="VS2005">
    <!-- Add documents here -->
</syncfusion:DocumentContainer>
为传统MDI应用启用最小化、最大化和调整大小功能。
xaml
<syncfusion:DocumentContainer Name="DocContainer" 
                              Mode="MDI" 
                              CanMDIMinimize="True"
                              SwitchMode="VS2005">
    <!-- Add documents here -->
</syncfusion:DocumentContainer>

Pattern 3: State Persistence (XML)

模式3:状态持久化(XML)

Save and restore document layouts across sessions.
csharp
using System.Runtime.Serialization.Formatters.Binary;

// Save state to XML
BinaryFormatter formatter = new BinaryFormatter();
documentContainer.SaveDockState(formatter, StorageFormat.Xml, @"layout.xml");

// Load state from XML
BinaryFormatter formatter = new BinaryFormatter();
documentContainer.LoadDockState(formatter, StorageFormat.Xml, @"layout.xml");
在会话间保存和恢复文档布局。
csharp
using System.Runtime.Serialization.Formatters.Binary;

// Save state to XML
BinaryFormatter formatter = new BinaryFormatter();
documentContainer.SaveDockState(formatter, StorageFormat.Xml, @"layout.xml");

// Load state from XML
BinaryFormatter formatter = new BinaryFormatter();
documentContainer.LoadDockState(formatter, StorageFormat.Xml, @"layout.xml");

Pattern 4: Dynamic Document Management

模式4:动态文档管理

Add and remove documents programmatically.
csharp
// Add a new document
TextBox newDoc = new TextBox { Text = "New Document Content" };
DocumentContainer.SetHeader(newDoc, "New Document");
documentContainer.Items.Add(newDoc);

// Remove all documents
documentContainer.Items.Clear();

// Remove specific document
documentContainer.Items.Remove(newDoc);
以编程方式添加和移除文档。
csharp
// Add a new document
TextBox newDoc = new TextBox { Text = "New Document Content" };
DocumentContainer.SetHeader(newDoc, "New Document");
documentContainer.Items.Add(newDoc);

// Remove all documents
documentContainer.Items.Clear();

// Remove specific document
documentContainer.Items.Remove(newDoc);

Key Properties

核心属性

PropertyTypeDescription
Mode
DocumentContainerModeSets TDI or MDI mode
SwitchMode
SwitchModeWindow switcher style (Immediate, List, QuickTabs, VS2005, VistaFlip)
CanMDIMinimize
boolEnables MDI window minimization
Items
ItemCollectionCollection of documents in the container
属性类型描述
Mode
DocumentContainerMode设置TDI或MDI模式
SwitchMode
SwitchMode窗口切换器样式(Immediate、List、QuickTabs、VS2005、VistaFlip)
CanMDIMinimize
bool启用MDI窗口最小化
Items
ItemCollection容器中的文档集合

Key Methods

核心方法

MethodDescription
SaveDockState()
Saves document state to storage (Registry, XML, Binary)
LoadDockState()
Loads document state from storage
ResetState()
Resets the container to default state
DeleteDockState()
Deletes saved state from storage
Items.Add()
Adds a document to the container
Items.Clear()
Removes all documents from the container
方法描述
SaveDockState()
将文档状态保存到存储介质(注册表、XML、二进制)
LoadDockState()
从存储介质加载文档状态
ResetState()
将容器重置为默认状态
DeleteDockState()
从存储介质中删除已保存的状态
Items.Add()
向容器中添加文档
Items.Clear()
从容器中移除所有文档

Common Use Cases

常见应用场景

  1. Code Editors and IDEs: Create multi-document code editing environments with tabbed or MDI layouts
  2. Data Entry Applications: Manage multiple data entry forms simultaneously
  3. Document Viewers: Display multiple documents (PDF, images, text) in a tabbed interface
  4. Dashboard Applications: Organize multiple dashboard panels and charts
  5. Reporting Tools: Manage multiple report views and editors
  6. Configuration Tools: Handle multiple configuration panels or property editors
  7. Medical Applications: Manage patient records with multiple document views
  8. Financial Applications: Display multiple charts, reports, and data grids simultaneously

Next Steps: Choose the appropriate reference file above based on your specific implementation needs. Start with
getting-started.md
for initial setup, then explore specific features as needed.
  1. 代码编辑器与IDE:创建带有选项卡式或MDI布局的多文档代码编辑环境
  2. 数据录入应用:同时管理多个数据录入表单
  3. 文档查看器:在选项卡式界面中显示多个文档(PDF、图片、文本)
  4. 仪表板应用:组织多个仪表板面板和图表
  5. 报表工具:管理多个报表视图和编辑器
  6. 配置工具:处理多个配置面板或属性编辑器
  7. 医疗应用:通过多文档视图管理患者记录
  8. 金融应用:同时显示多个图表、报表和数据网格

下一步: 根据你的具体实现需求选择上述对应的参考文档。从
getting-started.md
开始进行初始配置,然后根据需要探索特定功能。