关于 syncfusion-winforms-tile-layout
此参考技能介绍使用 Syncfusion WinForms TileLayout 构建磁贴界面,适合需要分组和重排磁贴的 Windows Forms 开发者,也涵盖轮播图像或文本的磁贴。
主要功能
- 01使用 LayoutGroups 分组磁贴
- 02显示 ImageStreamer 轮播内容
- 03通过拖放重排磁贴
- 04设置边距与对齐方式
- 05自定义分组和磁贴背景
适用场景
- 01创建分组式应用启动器
- 02构建动态磁贴仪表板
- 03在画廊中轮播图像
- 04按类别排列磁贴
安装
复制下面的命令,在终端中运行。
npx skills add https:/ / github.com/ syncfusion/ winforms-ui-components-skills --skill syncfusion-winforms-tile-layout安装后在 Claude Code 中输入/syncfusion-winforms-tile-layout确认已加载。
包含的文件
除 SKILL.md 外,安装时一起下载的参考资料和脚本。
references/appearance-styling.mddrag-and-drop.mdgetting-started.mdimage-streamer-tiles.mdlayout-customization.md详细介绍
在 Syncfusion WinForms 中实现 TileLayout
本技能将指导你实现 Syncfusion WinForms TileLayout 控件——一种受 Windows 8「开始」屏幕启发的容器,可容纳按组组织的磁贴项,支持拖放重新排序、带旋转内容的动态磁贴,以及灵活的布局自定义。
何时使用此技能
当用户需要以下功能时,请使用此技能:
- 创建包含分组磁贴的 Windows 8 Metro 风格磁贴界面
- 实现可拖动、可重新排列磁贴的 仪表板布局
- 使用 ImageStreamer 构建带有旋转图像或文本的 动态磁贴显示
- 设计按逻辑类别(LayoutGroups)组织的 分组磁贴容器
- 添加运行时在组内或组间重新排列磁贴的 拖放功能
- 创建可自定义边距、对齐方式和位置的 磁贴布局
- 实现采用磁贴导航的 现代化触控友好界面
- 构建采用磁贴菜单的 应用启动器或开始屏幕
- 以磁贴形式显示照片库或媒体合集
- 创建包含多个信息磁贴的状态仪表板
TileLayout 非常适合需要灵活、可视化、基于磁贴的界面的现代应用,类似于 Windows 8/10「开始」屏幕。
组件概述
TileLayout 是一种容器控件,用于管理按 LayoutGroups 组织的磁贴集合。每个 LayoutGroup 都包含充当独立磁贴的 ImageStreamer 项。该控件提供:
- LayoutGroups:逻辑分组的磁贴,可选择显示标题
- ImageStreamer 项:可显示旋转图像或文本的动态磁贴
- 拖放:在运行时于组内或组间重新排列磁贴
- 布局自定义:边距、对齐方式、行方向控制
- 外观选项:主题、平面父窗体、组标题显示
- 矩阵定位:在响应式网格中自动排列磁贴
关键层级结构:
TileLayout (Container)
└── LayoutGroup(s) (Groups)
└── ImageStreamer(s) (Individual Tiles)
文档与导航指南
入门与基本设置
📄 阅读: references/getting-started.md
当用户需要以下内容时,请阅读此参考文档:
- 所需的程序集依赖项和 NuGet 包
- 通过设计器或代码创建 TileLayout
- 添加 LayoutGroups 以组织磁贴
- 向组中添加 ImageStreamer 项
- 首次实现所需的基本配置
- 完整的最小可运行示例
- 了解 TileLayout 层级结构
布局自定义
📄 阅读: references/layout-customization.md
当用户需要以下内容时,请阅读此参考文档:
- Alignment 属性(Near、Far、Center)
- 水平边距(HorzNearMargin、HorzFarMargin)
- 垂直边距(TopMargin、BottomMargin)
- 使用 ReverseRows 更改布局方向
- MainLayout 属性配置
- 自定义位置和间距
- 响应式布局行为
外观与样式
📄 阅读: references/appearance-styling.md
当用户需要以下内容时,请阅读此参考文档:
- 使用 SetParentFormFlat 设置平面窗体外观
- 使用 ShowGroupTitle 显示组名称
- 使用 IgnoreThemeBackground 设置自定义 BackColor
- 主题集成与样式设置
- 视觉自定义选项
- 专业外观配置
ImageStreamer 动态磁贴
📄 阅读: references/image-streamer-tiles.md
当用户需要以下内容时,请阅读此参考文档:
- 向 ImageStreamer 磁贴添加图像
- 使用 SlideShow 和 SliderSpeed 设置动画
- 使用 ShowNavigator 显示导航控件
- ImageStreamDirection(5 个方向:LeftToRight、RightToLeft、TopToBottom、BottomToTop、HorizontalFlip)
- ImageStreamerType(Normal 与 DoubleHorizontal)
- 使用 InternalBackColor 设置磁贴背景
- 创建包含图像或文本的动态旋转磁贴
- 配置磁贴动画和过渡效果
拖放
📄 阅读: references/drag-and-drop.md
当用户需要以下功能时,请阅读此参考文档:
- 在 LayoutGroups 内拖放
- 在不同组之间拖放
- 由用户在运行时重新排列磁贴
- 用户交互模式
- 限制和最佳实践
快速入门示例
下面是一个创建包含两个组和实时磁贴的 TileLayout 的最简示例:
using Syncfusion.Windows.Forms.Tools;
using System;
using System.Drawing;
using System.Windows.Forms;
public class TileLayoutExample : Form
{
private TileLayout tileLayout1;
private LayoutGroup layoutGroup1;
private LayoutGroup layoutGroup2;
private ImageStreamer imageStreamer1;
private ImageStreamer imageStreamer2;
public TileLayoutExample()
{
// Create TileLayout
tileLayout1 = new TileLayout();
tileLayout1.Dock = DockStyle.Fill;
tileLayout1.ShowGroupTitle = true;
// Create first LayoutGroup
layoutGroup1 = new LayoutGroup();
layoutGroup1.Text = "Photos";
layoutGroup1.BackColor = ColorTranslator.FromHtml("#8C6FF5");
// Create second LayoutGroup
layoutGroup2 = new LayoutGroup();
layoutGroup2.Text = "Documents";
layoutGroup1.BackColor = ColorTranslator.FromHtml("#8C6FF5");
// Create ImageStreamer tiles with images
imageStreamer1 = new ImageStreamer();
imageStreamer1.SlideShow = true;
imageStreamer1.SliderSpeed = 100;
imageStreamer1.Images.Add(Image.FromFile("image1.jpg"));
imageStreamer1.Images.Add(Image.FromFile("image2.jpg"));
imageStreamer2 = new ImageStreamer();
imageStreamer2.InternalBackColor = Color.LightBlue;
imageStreamer2.Images.Add(Image.FromFile("doc1.png"));
// Add ImageStreamers to LayoutGroups
layoutGroup1.Controls.Add(imageStreamer1);
layoutGroup2.Controls.Add(imageStreamer2);
// Add LayoutGroups to TileLayout
tileLayout1.Controls.Add(layoutGroup1);
tileLayout1.Controls.Add(layoutGroup2);
// Add TileLayout to form
this.Controls.Add(tileLayout1);
this.Size = new Size(800, 600);
this.Text = "TileLayout Example";
}
}
结果: 一个包含两个组(“照片”和“文档”的磁贴布局,每组都包含带旋转图片的实时磁贴。
常见模式
包含多个磁贴组的仪表板
模式: 创建包含多个分组区域的仪表板,用于展示不同类型的内容。
// Create main TileLayout
var tileLayout = new TileLayout();
tileLayout.Dock = DockStyle.Fill;
tileLayout.ShowGroupTitle = true;
tileLayout.MainLayout.TopMargin = 20;
tileLayout.MainLayout.HorzNearMargin = 20;
// Create groups for different categories
var socialGroup = new LayoutGroup { Text = "Social" };
var newsGroup = new LayoutGroup { Text = "News" };
var mediaGroup = new LayoutGroup { Text = "Media" };
// Add multiple tiles to each group
for (int i = 0; i < 4; i++)
{
var tile = new ImageStreamer();
tile.Images.Add(GetImage($"social{i}.png"));
tile.SlideShow = true;
socialGroup.Controls.Add(tile);
}
tileLayout.Controls.Add(socialGroup);
tileLayout.Controls.Add(newsGroup);
tileLayout.Controls.Add(mediaGroup);
适用场景: 用户需要一个包含多个磁贴类别、组织有序的仪表板。
带自定义动画的实时磁贴
模式: 配置 ImageStreamer 磁贴,以轮播内容并自定义动画方向。
// Create live tile with multiple images
var liveTile = new ImageStreamer();
liveTile.SlideShow = true;
liveTile.SliderSpeed = 150; // Slower animation
liveTile.ShowNavigator = true; // Show navigation arrows
liveTile.ImageStreamDirection = ImageStreamer.StreamDirection.BottomToTop;
// Add multiple images for rotation
liveTile.Images.Add(Image.FromFile("slide1.png"));
liveTile.Images.Add(Image.FromFile("slide2.png"));
liveTile.Images.Add(Image.FromFile("slide3.png"));
liveTile.InternalBackColor = Color.FromArgb(0, 120, 215); // Modern blue
layoutGroup.Controls.Add(liveTile);
适用场景: 用户需要内容自动轮播的磁贴(新闻源、照片集、状态显示)。
自定义布局位置
模式: 使用自定义边距和对齐方式控制磁贴布局。
// Configure MainLayout for custom positioning
tileLayout.MainLayout.Alignment = FlowAlignment.Center;
tileLayout.MainLayout.HorzNearMargin = 50; // Left margin
tileLayout.MainLayout.HorzFarMargin = 50; // Right margin
tileLayout.MainLayout.TopMargin = 30; // Top margin
tileLayout.MainLayout.BottomMargin = 30; // Bottom margin
tileLayout.MainLayout.ReverseRows = false; // Standard flow
适用场景: 用户需要居中布局、自定义间距或特定位置。
关键属性
TileLayout 属性
| 属性 | 类型 | 描述 | 使用场景 |
|---|---|---|---|
ShowGroupTitle | bool | 显示/隐藏组标题 | 在组上方显示类别名称 |
SetParentFormFlat | bool | 将扁平外观应用于父窗体 | 实现现代、简约的外观 |
IgnoreThemeBackground | bool | 使用 BackColor,而非主题背景 | 自定义背景颜色 |
MainLayout.Alignment | FlowAlignment | Near、Center、Far 对齐方式 | 控制磁贴组的位置 |
MainLayout.HorzNearMargin | int | 左边距(像素) | 自定义左侧间距 |
MainLayout.HorzFarMargin | int | 右边距(像素) | 自定义右侧间距 |
MainLayout.TopMargin | int | 上边距(像素) | 自定义顶部间距 |
MainLayout.BottomMargin | int | 下边距(像素) | 自定义底部间距 |
MainLayout.ReverseRows | bool | 反转布局方向 | 从右向左或从下向上排列 |
LayoutGroup 属性
| 属性 | 类型 | 描述 | 使用场景 |
|---|---|---|---|
Text | string | 组标题文本 | 标记磁贴类别 |
BackColor | Color | 组背景颜色 | 区分不同的组 |
Items | Collection | 组中的 ImageStreamer 项 | 访问/管理组中的磁贴 |
ImageStreamer(磁贴)属性
| 属性 | 类型 | 描述 | 使用场景 |
|---|---|---|---|
Images | ImageCollection | 要显示的图片集合 | 为实时磁贴添加图片 |
SlideShow | bool | 启用图片轮播 | 使用多张图片为磁贴添加动画 |
SliderSpeed | int | 动画速度(毫秒) | 控制轮播速度 |
ShowNavigator | bool | 显示导航箭头 | 允许手动切换图片 |
ImageStreamDirection | StreamDirection | 动画方向 | 控制幻灯片切换方向 |
Type | ImageStreamerType | Normal 或 DoubleHorizontal | 显示 1 张或 2 张图片 |
InternalBackColor | Color | 磁贴背景颜色 | 自定义单个磁贴的颜色 |
常见使用场景
应用启动器
创建 Windows 8 风格的开始屏幕,使用应用磁贴:
- 按类别对应用分组(生产力、媒体、游戏)
- 每个磁贴显示应用图标
- 点击磁贴以启动应用程序
- 拖放以重新排列收藏项
照片库仪表板
以磁贴形式展示照片集:
- 按相册/日期对照片分组
- ImageStreamer 轮播照片
- 使用 SlideShow 自动轮播
- 点击以查看全尺寸图片
状态监控仪表板
使用实时磁贴显示实时状态:
- 按系统/服务类型分组
- 磁贴显示当前状态/指标
- 使用新数据自动更新
- 使用颜色区分状态(绿色/黄色/红色)
新闻/社交信息流聚合器
显示多个内容信息流:
- 按信息流来源分组(新闻、Twitter、RSS)
- 磁贴轮播显示近期内容
- 点击磁贴可打开完整文章
- 按间隔自动刷新
实现清单
实现 TileLayout 时,请确保:
- ✅ 引用必需的程序集(Syncfusion.Tools.Windows.dll 等)
- ✅ 创建 TileLayout 并将其添加到窗体(通常设置为停靠)
- ✅ 添加 LayoutGroups,按类别组织磁贴
- ✅ 将 ImageStreamer 项目作为磁贴添加到 LayoutGroups
- ✅ 将图像加载到 ImageStreamer.Images 集合中
- ✅ 配置 SlideShow/SliderSpeed,用于实时磁贴
- ✅ 根据需要自定义布局边距/对齐方式
- ✅ 根据需要显示/隐藏组标题
- ✅ 启用拖放(默认行为)
- ✅ 根据需要添加磁贴点击事件处理程序
故障排除快速参考
问题: 磁贴未显示
- 确保 ImageStreamer.Images 集合中至少有一张图像
- 检查 LayoutGroup.Controls 是否包含 ImageStreamer 实例
- 验证 TileLayout.Controls 是否包含 LayoutGroups
问题: SlideShow 未播放动画
- 设置
ImageStreamer.SlideShow = true - 确保 Images 集合中有多张图像
- 检查 SliderSpeed 是否为合理值(50-200 ms)
问题: 拖放不起作用
- 默认情况下已启用拖放
- 确保未处理冲突的鼠标事件
- 检查磁贴是否为 ImageStreamer 控件,而非其他类型
问题: 布局未正确居中/对齐
- 使用
MainLayout.Alignment属性 - 调整 HorzNearMargin/HorzFarMargin 以设置水平位置
- 设置 TopMargin/BottomMargin 以调整垂直间距
问题: 主题背景覆盖了自定义颜色
- 设置
IgnoreThemeBackground = true - 然后将自定义 BackColor 应用于 TileLayout/LayoutGroups