关于 syncfusion-winforms-hub-tile
此技能指导在 Windows Forms 应用中实现 Syncfusion HubTile 动态磁贴。它介绍滑动、翻转和脉冲缩放动画,以及磁贴内容、样式和动画控制。
主要功能
- 01提供滑动、翻转和脉冲动画
- 02配置标题、页脚、图像与横幅
- 03自定义悬停、选中和按下效果
- 04控制动画启停与冻结
- 05设置转场方向、速度和缩放
适用场景
- 01构建带动态内容的仪表板
- 02展示滑动更新的新闻内容
- 03制作带脉冲动画的媒体磁贴
- 04以翻转磁贴展示状态及详情
安装
复制下面的命令,在终端中运行。
npx skills add https:/ / github.com/ syncfusion/ winforms-ui-components-skills --skill syncfusion-winforms-hub-tile安装后在 Claude Code 中输入/syncfusion-winforms-hub-tile确认已加载。
包含的文件
除 SKILL.md 外,安装时一起下载的参考资料和脚本。
references/appearance-styling.mddefault-tile.mdfreezing-control.mdgetting-started.mdpulsing-tile.mdrotate-tile.md详细介绍
实现 HubTiles
何时使用此技能
当用户需要在 Windows Forms 应用程序中实现 Syncfusion HubTile 控件时,请使用此技能。HubTile 提供实时磁贴功能,具有类似于 Windows 8 和 Windows Phone 的动画过渡效果。
常见用例
- 仪表板磁贴 - 内容动态更新的仪表板面板,并带有动画效果
- 应用启动器 - Windows 8 风格的开始屏幕磁贴
- 状态显示 - 带有过渡效果的动画状态指示器
- 实时通知 - 通过滑动/旋转/脉冲效果更新内容的磁贴
- 媒体库 - 带有脉冲动画的音乐/视频磁贴
- 新闻源 - 在内容更新之间切换的磁贴
- KPI 面板 - 带有动态更新效果的关键绩效指标
- 导航菜单 - 类似于 Windows Phone 的交互式磁贴导航
何时不使用: 对于不需要动画效果的静态按钮或面板,请使用标准 Button 或 Panel 控件。对于数据网格或表格,请使用 DataGridView 或 Syncfusion GridControl。
组件概述
Syncfusion HubTile 是一种内容控件,可用作带有自动动画的实时磁贴。内容更新通过各种过渡效果显示,类似于 Windows 8 和 Windows Phone 实时磁贴。
关键组件:
- 标题区域(顶部)
- 内容/图像区域(中心)
- 页脚区域(底部)
- 可选的横幅叠加层
磁贴类型
HubTile 支持三种动画样式:
1. DefaultTile
通过滑动过渡效果(从下到上、从上到下、从左到右、从右到左)提供通知。
适用于:
- 显示连续更新的内容
- 新闻或状态信息流
- 按特定方向流动的内容
2. RotateTile
通过水平或垂直旋转磁贴来播放动画,翻转后显示另一组内容。
适用于:
- 显示正反两面的内容(例如,问题/答案)
- 双状态显示
- 适合翻转动画的内容
3. PulsingTile
创建类似于 Windows Phone 音乐和视频磁贴的缩放效果。
适用于:
- 媒体内容(音乐、视频、照片)
- 吸引用户注意内容
- 打造动态的视觉效果
文档和导航指南
安装和设置
📄 阅读: references/getting-started.md
当用户需要首次设置 HubTile 时使用。涵盖:
- 程序集引用(Syncfusion.Tools.Windows.dll、Syncfusion.Shared.Base.dll)
- NuGet 包安装
- 命名空间导入(Syncfusion.Windows.Forms.Tools)
- 设计器和基于代码的设置
- 创建基本磁贴
- 添加图像、标题和页脚
- 框架支持(.NET Framework 4.5+、.NET 6.0-8.0)
DefaultTile(滑动过渡)
📄 阅读: references/default-tile.md
当用户需要带有滑动过渡效果的磁贴时使用。涵盖:
- DefaultTile 配置
- Title、Footer 和 ImageSource 属性
- 过渡效果(BottomToTop、TopToBottom、LeftToRight、RightToLeft)
- SlideTransition 属性
- ImageTransitionSpeed 控制
- TurnLiveTileOn 属性
- 完整的过渡示例
RotateTile(翻转动画)
📄 阅读: references/rotate-tile.md
当用户需要旋转/翻转磁贴时使用。涵盖:
- RotateTile 配置
- 水平和垂直旋转
- RotationTransition 属性
- TileFlipDirection(Horizontal、Vertical)
- RotationTransitionSpeed 控制
- 正反面内容设置
- 完整的旋转示例
PulsingTile(缩放效果)
📄 阅读: references/pulsing-tile.md
当用户需要带有缩放动画的磁贴时使用。涵盖:
- PulsingTile 配置
- 放大/缩小效果
- PulseDuration 属性(间隔控制)
- PulseScale 属性(缩放级别)
- 图像平移效果
- 媒体磁贴样式
- 完整的脉冲动画示例
外观和样式
📄 阅读: references/appearance-styling.md
当用户想要自定义磁贴外观时阅读。内容包括:
- 横幅的显示与自定义
- 横幅文字、图标和颜色
- 选择标记(Windows 8 风格)
- SelectionMarkerColor 属性
- 悬停时的边框颜色
- EnableHoverColor 属性
- 悬停时展开功能
- 磁贴按下行为(滑动效果)
- EnableTileSlideEffect 属性
- 完整的样式示例
冻结和控制
📄 阅读: references/freezing-control.md
当用户需要暂停或恢复磁贴动画时阅读。内容包括:
- IsFrozen 属性
- 以编程方式停止动画
- 动态冻结/解冻
- 冻结的使用场景(加载、用户交互)
- 状态管理
- 完整的控制示例
快速入门示例
带滑动过渡的 DefaultTile
using Syncfusion.Windows.Forms.Tools;
// Create HubTile
HubTile newsTile = new HubTile();
newsTile.Size = new Size(200, 200);
newsTile.Location = new Point(20, 20);
// Set tile type
newsTile.TileType = HubTileType.DefaultTile;
// Configure content
newsTile.Title.Text = "Breaking News";
newsTile.Title.TextColor = Color.White;
newsTile.Footer.Text = "CNN";
newsTile.Footer.TextColor = Color.White;
newsTile.BackColor = Color.FromArgb(17, 158, 218);
// Set background image
newsTile.ImageSource = Image.FromFile("news.jpg");
// Enable live tile with transition
newsTile.TurnLiveTileOn = true;
newsTile.SlideTransition = TransitionDirection.BottomToTop;
newsTile.ImageTransitionSpeed = 3;
// Add to form
this.Controls.Add(newsTile);
带翻转动画的 RotateTile
// Create rotating tile
HubTile rotateTile = new HubTile();
rotateTile.Size = new Size(200, 200);
rotateTile.Location = new Point(240, 20);
// Set tile type
rotateTile.TileType = HubTileType.RotateTile;
// Configure content
rotateTile.Title.Text = "Weather";
rotateTile.Title.TextColor = Color.White;
rotateTile.Footer.Text = "72°F Sunny";
rotateTile.Footer.TextColor = Color.White;
rotateTile.BackColor = Color.FromArgb(255, 140, 0);
// Configure rotation
rotateTile.TurnLiveTileOn = true;
rotateTile.RotationTransition = TileFlipDirection.Horizontal;
rotateTile.RotationTransitionSpeed = 2;
// Add image
rotateTile.ImageSource = Image.FromFile("weather.jpg");
this.Controls.Add(rotateTile);
用于媒体的 PulsingTile
// Create pulsing tile
HubTile mediaTile = new HubTile();
mediaTile.Size = new Size(200, 200);
mediaTile.Location = new Point(460, 20);
// Set tile type
mediaTile.TileType = HubTileType.PulsingTile;
// Configure content
mediaTile.Title.Text = "Now Playing";
mediaTile.Title.TextColor = Color.White;
mediaTile.Footer.Text = "Music";
mediaTile.Footer.TextColor = Color.White;
mediaTile.BackColor = Color.FromArgb(139, 0, 139);
// Configure pulsing effect
mediaTile.TurnLiveTileOn = true;
mediaTile.PulseDuration = 2;
mediaTile.PulseScale = 1.5f;
// Add album art
mediaTile.ImageSource = Image.FromFile("album.jpg");
this.Controls.Add(mediaTile);
磁贴类型选择指南
| 需求 | 使用此类型 | 原因 |
|---|---|---|
| 按顺序更新内容 | DefaultTile | 平滑的滑动过渡可展示内容变化 |
| 定向流动(新闻动态) | DefaultTile(BottomToTop) | 更新内容的阅读顺序自然 |
| 双状态内容 | RotateTile | 翻转可展示替代信息 |
| 正反面内容 | RotateTile | 非常适合问题/答案、信息/详情 |
| 媒体内容显示 | PulsingTile | 符合 Windows Phone 音乐/视频风格 |
| 吸引注意力 | PulsingTile | 缩放效果可增加视觉趣味 |
| 静态动画磁贴 | 使用 IsFrozen = false 的任意类型 | 自动播放动画 |
| 交互式磁贴 | DefaultTile + EnableTileSlideEffect | 按下时提供反馈效果 |
常见模式
模式 1:包含多种磁贴类型的仪表板
// Create dashboard layout
FlowLayoutPanel dashboard = new FlowLayoutPanel();
dashboard.Dock = DockStyle.Fill;
dashboard.BackColor = Color.FromArgb(30, 30, 30);
dashboard.Padding = new Padding(10);
// News tile (DefaultTile with slide)
HubTile newsTile = CreateDefaultTile("News", "Latest Updates", Color.FromArgb(17, 158, 218));
newsTile.SlideTransition = TransitionDirection.BottomToTop;
dashboard.Controls.Add(newsTile);
// Weather tile (RotateTile with flip)
HubTile weatherTile = CreateRotateTile("Weather", "72°F", Color.FromArgb(255, 140, 0));
weatherTile.RotationTransition = TileFlipDirection.Horizontal;
dashboard.Controls.Add(weatherTile);
// Media tile (PulsingTile with zoom)
HubTile mediaTile = CreatePulsingTile("Music", "Now Playing", Color.FromArgb(139, 0, 139));
mediaTile.PulseScale = 1.3f;
dashboard.Controls.Add(mediaTile);
this.Controls.Add(dashboard);
模式 2:带横幅通知的磁贴
HubTile notificationTile = new HubTile();
notificationTile.TileType = HubTileType.DefaultTile;
notificationTile.Size = new Size(200, 200);
// Main content
notificationTile.Title.Text = "Messages";
notificationTile.Footer.Text = "Inbox";
notificationTile.BackColor = Color.FromArgb(0, 120, 215);
// Enable banner
notificationTile.ShowBanner = true;
notificationTile.Banner.Text = "5 new messages";
notificationTile.Banner.TextColor = Color.White;
notificationTile.BannerColor = Color.FromArgb(255, 0, 0);
// Optional banner icon
notificationTile.ShowBannerIcon = true;
notificationTile.BannerIcon = Image.FromFile("notification.png");
// Enable transition
notificationTile.TurnLiveTileOn = true;
notificationTile.SlideTransition = TransitionDirection.LeftToRight;
模式 3:带悬停效果的交互式磁贴
HubTile interactiveTile = new HubTile();
interactiveTile.TileType = HubTileType.DefaultTile;
interactiveTile.Size = new Size(200, 200);
// Content
interactiveTile.Title.Text = "Documents";
interactiveTile.Footer.Text = "Recent Files";
interactiveTile.BackColor = Color.FromArgb(0, 150, 136);
// Enable hover effects
interactiveTile.EnableHoverColor = true;
interactiveTile.HoveredBorderColor = Color.White;
interactiveTile.ExpandOnHover = true;
// Enable press effect
interactiveTile.EnableTileSlideEffect = true;
// Selection marker
interactiveTile.IsSelectionMarked = true;
interactiveTile.SelectionMarkerColor = Color.Yellow;
// Click handler
interactiveTile.Click += (s, e) => {
MessageBox.Show("Tile clicked!");
};
模式 4:交互时冻结/解冻
HubTile controlledTile = new HubTile();
controlledTile.TileType = HubTileType.RotateTile;
controlledTile.TurnLiveTileOn = true;
// Freeze on mouse enter
controlledTile.MouseEnter += (s, e) => {
controlledTile.IsFrozen = true;
};
// Unfreeze on mouse leave
controlledTile.MouseLeave += (s, e) => {
controlledTile.IsFrozen = false;
};
关键属性
通用属性(所有磁贴类型)
| 属性 | 类型 | 说明 |
|---|---|---|
TileType | HubTileType | DefaultTile、RotateTile 或 PulsingTile |
TurnLiveTileOn | bool | 启用/禁用动画 |
IsFrozen | bool | 临时冻结动画 |
Title.Text | string | 标题文字(磁贴顶部) |
Title.TextColor | Color | 标题文字颜色 |
Footer.Text | string | 页脚文字(磁贴底部) |
Footer.TextColor | Color | 页脚文字颜色 |
ImageSource | Image | 背景图像 |
BackColor | Color | 磁贴背景颜色 |
DefaultTile 属性
| 属性 | 类型 | 说明 |
|---|---|---|
SlideTransition | TransitionDirection | BottomToTop、TopToBottom、LeftToRight、RightToLeft |
ImageTransitionSpeed | int | 过渡速度(1-10,数值越大越快) |
ShowBanner | bool | 显示横幅叠加层 |
Banner.Text | string | 横幅通知文字 |
BannerColor | Color | 横幅背景颜色 |
ShowBannerIcon | bool | 在横幅中显示图标 |
BannerIcon | Image | 横幅图标图像 |
IsSelectionMarked | bool | 显示选择标记(Windows 8 风格) |
SelectionMarkerColor | Color | 选择标记边框颜色 |
EnableHoverColor | bool | 启用悬停边框高亮 |
HoveredBorderColor | Color | 悬停时的边框颜色 |
ExpandOnHover | bool | 鼠标悬停时展开磁贴 |
EnableTileSlideEffect | bool | 鼠标按下时启用滑动效果 |
RotateTile 属性
| 属性 | 类型 | 说明 |
|---|---|---|
RotationTransition | TileFlipDirection | 水平或垂直旋转 |
RotationTransitionSpeed | int | 旋转速度(1-10,数值越大越快) |
PulsingTile 属性
| 属性 | 类型 | 描述 |
|---|---|---|
PulseDuration | int | 放大/缩小间隔(秒) |
PulseScale | float | 缩放级别(1.0 = 100%,2.0 = 200%) |
常见用例
1. 应用仪表板
场景: 采用 Windows 8 风格开始屏幕,包含多个应用磁贴
解决方案: 使用包含多个 HubTiles 的 FlowLayoutPanel,并采用不同的磁贴类型和过渡效果
2. 实时新闻推送
场景: 新闻磁贴从底部滑入更新内容
解决方案: 使用带有 BottomToTop 过渡效果的 DefaultTile,并通过计时器定期更新内容
3. 媒体库
场景: 带有脉动动画的音乐/视频磁贴
解决方案: 使用设置了合适 PulseScale 的 PulsingTile,并添加专辑/视频封面图
4. 状态监视器
场景: 通过翻转显示详细信息的系统状态磁贴
解决方案: 使用 RotateTile,正面显示状态图标,背面显示详细指标
5. 通知中心
场景: 带有警报横幅通知的磁贴
解决方案: 启用 ShowBanner 的 DefaultTile,并动态更新 Banner.Text
6. 交互式菜单
场景: 适合触控操作的导航磁贴
解决方案: 使用启用 EnableTileSlideEffect 和 ExpandOnHover 的 DefaultTile,并添加点击处理程序
最佳实践
- 选择合适的磁贴类型 - 顺序显示内容使用 DefaultTile,双状态显示使用 RotateTile,媒体内容使用 PulsingTile
- 设置合理的过渡速度 - 速度设为 2-4 可实现平滑动画,避免突兀
- 使用一致的尺寸 - 标准 Windows 8 磁贴尺寸为 150x150、310x150 或 310x310
- 采用协调的配色方案 - 同一类别的磁贴使用相关颜色
- 有选择地启用实时磁贴 - 不要同时为所有磁贴启用动画,以免造成干扰
- 提供清晰的标题/页脚 - 帮助用户一眼识别磁贴用途
- 将横幅用于紧急通知 - 将横幅空间留给重要更新
- 交互时冻结动画 - 可考虑在用户悬停时冻结磁贴,以免造成干扰
- 测试过渡方向 - 确保滑动方向符合内容流逻辑
- 处理点击事件 - 为磁贴添加有意义的点击操作,使其具有交互性
磁贴样式指南
Windows 8 调色板
// Microsoft-inspired colors
Color TealBlue = Color.FromArgb(0, 120, 215); // Default blue
Color LimeGreen = Color.FromArgb(16, 137, 62); // Success/positive
Color OrangeRed = Color.FromArgb(202, 80, 16); // Warning
Color CrimsonRed = Color.FromArgb(232, 17, 35); // Error/urgent
Color Purple = Color.FromArgb(107, 105, 214); // Media/entertainment
Color Teal = Color.FromArgb(0, 153, 188); // Information
尺寸建议
// Small tile (single)
Size smallTile = new Size(150, 150);
// Wide tile (horizontal)
Size wideTile = new Size(310, 150);
// Large tile
Size largeTile = new Size(310, 310);