mcpField
S
syncfusion-wpf-tabbedwindow

syncfusion-wpf-tabbedwindow

github.com/syncfusion设计与 UI5163 次安装1 周前更新
代码仓库

关于 syncfusion-wpf-tabbedwindow

指导使用 `SfChromelessWindow` 与 `SfTabControl` 在 WPF 中构建标签窗口,支持文档式界面、标签拖拽和跨窗口合并。适合需要 MVVM 绑定与多窗口标签管理的应用开发者。

主要功能

  1. 01标签拖拽排序与分离
  2. 02在窗口间合并标签
  3. 03动态添加、移除和选择
  4. 04通过 ItemsSource 绑定数据
  5. 05自定义标签与内容模板
  6. 06配置窗口模式和主题

适用场景

  1. 01构建多标签文档编辑器
  2. 02实现标签拖出为浮动窗口
  3. 03管理多个窗口间的标签移动
  4. 04使用 MVVM 集合驱动标签

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/syncfusion/wpf-ui-components-skills --skill syncfusion-wpf-tabbedwindow

安装后在 Claude Code 中输入/syncfusion-wpf-tabbedwindow确认已加载。

包含的文件

除 SKILL.md 外,安装时一起下载的参考资料和脚本。

references/
customization.md
data-binding.md
getting-started.md
merge-tabs.md
tab-management.md

详细介绍

实现 Syncfusion WPF 选项卡窗口

本指南全面介绍如何实现 Syncfusion WPF 选项卡窗口控件。该控件将 SfChromelessWindow 与 SfTabControl 结合,可用于构建专业的文档型应用程序,并提供高级选项卡管理、分离窗口和跨窗口合并选项卡等功能。

何时使用此技能

适用于包含多个选项卡、浏览器风格界面、分离窗口、选项卡合并和 MVVM 绑定的文档型应用程序。涵盖设置、窗口模式、选项卡管理、数据绑定、浮动窗口和自定义。

组件概览

选项卡窗口是 SfChromelessWindow 与 SfTabControl 的强大组合,可用于构建专业的文档型应用程序,并提供以下功能:

  • 拖放重新排序 - 可直观地在选项卡栏内或不同窗口之间重新排列选项卡
  • 分离窗口 - 将选项卡拖出窗口边界,即可创建浮动窗口
  • 选项卡合并 - 通过验证在多个 TabbedWindow 实例之间移动选项卡
  • 灵活的选项卡管理 - 动态添加、移除和选择选项卡,并提供关闭/新建选项卡按钮
  • MVVM 支持 - 通过 ItemsSource 实现完整的数据绑定,适用于数据驱动场景
  • 窗口类型模式 - 选项卡模式(集成到窗口框架)或普通模式(基于内容)
  • 内容自定义 - 支持自定义标题、图标和内容的模板
  • 事件驱动架构 - 为所有选项卡操作提供全面的事件

所需的主要程序集:

  • Syncfusion.SfChromelessWindow.WPF
  • Syncfusion.Shared.WPF

命名空间:

xmlns:syncfusion="http://schemas.syncfusion.com/wpf"

文档与导航指南

入门

📄 阅读: references/getting-started.md

适用于以下情况:

  • 安装并引用所需程序集
  • 在 XAML 或代码隐藏中创建第一个选项卡窗口
  • 了解窗口类型模式(选项卡模式与普通模式)
  • 为应用程序选择合适的模式
  • 创建基本选项卡项
  • 配置必要属性

主要主题: 安装、基本窗口设置、WindowType 属性、选项卡模式与普通模式对比、程序集引用、命名空间导入


选项卡管理

📄 阅读: references/tab-management.md

适用于以下情况:

  • 为选项卡添加关闭按钮
  • 启用新建选项卡(+)按钮
  • 处理 NewTabRequested 事件以动态创建选项卡
  • 自定义新建选项卡按钮的外观
  • 实现键盘快捷键(Ctrl+Tab、Ctrl+Shift+Tab、Ctrl+T)
  • 支持鼠标中键单击关闭选项卡
  • 以编程方式添加、移除或选择选项卡

主要主题: CloseButtonVisibility、EnableNewTabButton、NewTabRequested 事件、NewTabButtonStyle、键盘快捷键、选项卡选择


数据绑定(MVVM)

📄 阅读: references/data-binding.md

适用于以下情况:

  • 将选项卡绑定到 ViewModel 集合
  • 在选项卡窗口中实现 MVVM 模式
  • 在数据驱动的选项卡场景中使用 ItemsSource
  • 创建选项卡模型和 ViewModel
  • 通过模板自定义选项卡标题和内容
  • 配置 ItemTemplate 和 ContentTemplate
  • 使用 ItemContainerStyle 设置选项卡样式
  • 使用 ObservableCollection 处理动态集合更新

主要主题: MVVM 模式、ItemsSource 绑定、ItemTemplate、ContentTemplate、ItemContainerStyle、ObservableCollection、选项卡模型


标签合并和浮动窗口

📄 阅读: references/merge-tabs.md

在需要以下操作时:

  • 启用拖出功能以创建浮动窗口
  • 了解标签如何变为独立窗口
  • 将浮动标签重新附加到主窗口
  • 在多个窗口之间合并标签
  • 使用 PreviewTabMerge 事件验证合并操作
  • 控制哪些标签可以移动
  • 在合并操作期间转换项目
  • 处理多窗口工作区场景

主要主题: 拖出窗口、拖出窗口边界的行为、浮动窗口生命周期、PreviewTabMerge 事件、TabMergePreviewEventArgs、跨窗口合并、合并验证


自定义和样式设置

📄 阅读: references/customization.md

在需要以下操作时:

  • 应用 Syncfusion 主题
  • 自定义窗口边框外观
  • 设置标签页眉和内容区域的样式
  • 创建自定义页眉和内容模板
  • 自定义关闭按钮外观
  • 配置拖放视觉反馈
  • 设置颜色、字体和间距
  • 实现响应式设计
  • 遵循专业外观的最佳实践

主要主题: 主题应用、样式自定义、模板自定义、视觉外观、AllowDragDrop、响应式设计、专业样式


快速入门示例

带关闭按钮的基本标签式窗口

XAML:

<syncfusion:SfChromelessWindow x:Class="TabbedWindowApp.MainWindow"
        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="Document Manager"
        WindowType="Tabbed"
        Height="600" 
        Width="900">
        
        <syncfusion:SfTabControl 
            AllowDragDrop="True"
            EnableNewTabButton="True"
            NewTabRequested="OnNewTabRequested">
            
            <syncfusion:SfTabItem 
                Header="Document 1" 
                CloseButtonVisibility="Visible">
                <TextBlock Text="Welcome to Document 1" 
                          Margin="20"/>
            </syncfusion:SfTabItem>
            
            <syncfusion:SfTabItem 
                Header="Document 2" 
                CloseButtonVisibility="Visible">
                <TextBlock Text="Welcome to Document 2" 
                          Margin="20"/>
            </syncfusion:SfTabItem>
            
        </syncfusion:SfTabControl>
            
</syncfusion:SfChromelessWindow> 

代码隐藏:

using Syncfusion.Windows.Controls;

public partial class MainWindow : SfChromelessWindow
{
    public MainWindow()
    {
        InitializeComponent();
    }

    private void OnNewTabRequested(object sender, NewTabRequestedEventArgs e)
    {
        var tabCount = ((SfTabControl)sender).Items.Count;
        var newTab = new SfTabItem 
        { 
            Header = $"Document {tabCount + 1}",
            Content = new TextBlock 
            { 
                Text = $"New Document {tabCount + 1}",
                Margin = new Thickness(20)
            },
            CloseButtonVisibility = Visibility.Visible
        };
        
        e.Item = newTab;
    }
}

常见模式

模式 1:支持拖放和新建标签的文档编辑器
<syncfusion:SfChromelessWindow WindowType="Tabbed">
    <syncfusion:SfTabControl 
        AllowDragDrop="True"
        EnableNewTabButton="True"
        NewTabRequested="OnNewTabRequested">
        
    </syncfusion:SfTabControl>
</syncfusion:SfChromelessWindow>
模式 2:MVVM 数据绑定标签
<syncfusion:SfTabControl ItemsSource="{Binding OpenDocuments}">
    <syncfusion:SfTabControl.ItemContainerStyle>
        <Style TargetType="syncfusion:SfTabItem">
            <Setter Property="HeaderTemplate">
                <Setter.Value>
                    <DataTemplate>
                        <TextBlock Text="{Binding Title}" />
                    </DataTemplate>
                </Setter.Value>
            </Setter>
        </Style>
    </syncfusion:SfTabControl.ItemContainerStyle>
    
    <syncfusion:SfTabControl.ContentTemplate>
        <DataTemplate>
            <TextBlock Text="{Binding Content}" />
        </DataTemplate>
    </syncfusion:SfTabControl.ContentTemplate>
</syncfusion:SfTabControl>

主要属性和事件

核心属性
属性类型描述
WindowTypeWindowTypeTabbed(集成在窗口边框中)或 Normal(基于内容)
AllowDragDropbool启用拖放重新排序和拖出功能
EnableNewTabButtonbool显示/隐藏新建标签(+)按钮
SelectedItemobject当前活动标签
SelectedIndexint活动标签的索引
ItemsSourceIEnumerable将标签绑定到集合(MVVM)
CloseButtonVisibilityVisibility显示/隐藏每个标签的关闭按钮
重要事件
事件描述
NewTabRequested用户点击 + 按钮时触发;设置 e.Item 以创建标签
PreviewTabMerge标签在窗口之间移动前触发;设置 e.Allow 以进行验证
SelectionChanged活动标签更改时触发
样式属性
属性描述
NewTabButtonStyle新建标签按钮的样式
ItemTemplate标签页眉的 DataTemplate
ContentTemplate标签内容的 DataTemplate
ItemContainerStyleSfTabItem 容器的样式

最佳实践

  1. 选择合适的模式: 以文档为中心的应用使用 Tabbed 模式;标签作为次要导航时使用 Normal 模式
  2. 启用拖放: 设置 AllowDragDrop="True",以实现直观的重新排序和拖出功能
  3. 处理 NewTabRequested: 当 EnableNewTabButton="True" 时,始终实现此事件处理程序
  4. MVVM 模式: 在数据驱动场景中使用 ItemsSource 绑定,实现清晰的关注点分离
  5. 验证合并: 使用 PreviewTabMerge 控制哪些标签可以在窗口之间移动
  6. 键盘支持: 向用户说明键盘快捷键(Ctrl+Tab、Ctrl+Shift+Tab、Ctrl+T)
  7. 视觉反馈: 确保拖放操作提供清晰的视觉指示,方便用户操作

评论

支持 Markdown