【WinForm UI控件系列】Breadcrumb 面包屑控件,支持三种样式

前言:c# winform UI控件系列(Net6+),纯GDI绘图无依赖,虽然做不到最好,争取做好更好用!

一、效果图(支持三种样式)

二、使用说明

控件名称

Breadcrumb

中文名称

面包屑控件

控件优点

Breadcrumb 是一个功能丰富的面包屑导航控件,支持多种样式、图标显示、点击事件等功能。适用于路径导航、层级展示等场景。

主要特性

  • 多种样式:支持默认、背景色、卡片三种样式
  • 图标支持:支持 Image 和 SVG 图标
  • 点击事件:支持项点击事件
  • 激活状态:支持设置当前激活项
  • 数据绑定:支持数据集合绑定

重要参数说明

基本属性

属性名 类型 默认值 说明
Items BreadcrumbItemCollection - 面包屑项集合
Style BreadcrumbStyle Default 面包屑样式
Separator string "/" 分隔符文本
AutoSize bool true 是否自动调整大小

面包屑样式(BreadcrumbStyle)

样式值 说明
Default 默认样式,使用分隔符分隔
Background 背景色样式,每项有独立背景色
Card 卡片样式,串联卡片效果
属性名 类型 默认值 说明
Text string null 项文本
Icon Image null 项图标(Image)
IconSvg string null SVG 图标名称
Tag object null 关联数据
IsActive bool false 是否为激活状态
Enabled bool true 是否可用

外观属性

属性名 类型 默认值 说明
ItemSpacing int 8 项间距
IconSpacing int 4 图标与文本间距
Font Font 微软雅黑 字体
ForeColor Color Black 文本颜色
ActiveColor Color Blue 激活项颜色
SeparatorColor Color Gray 分隔符颜色

重要事件

事件名 说明
ItemClick 点击项时触发
PropertyChanged 属性值改变时触发

使用示例

基本使用

csharp 复制代码
// 创建面包屑
Breadcrumb breadcrumb = new Breadcrumb();
breadcrumb.Size = new Size(400, 30);
this.Controls.Add(breadcrumb);

// 添加项
breadcrumb.Items.Add(new BreadcrumbItem { Text = "首页" });
breadcrumb.Items.Add(new BreadcrumbItem { Text = "产品中心" });
breadcrumb.Items.Add(new BreadcrumbItem { Text = "电子产品", IsActive = true });

不同样式

csharp 复制代码
// 默认样式(使用分隔符)
breadcrumb1.Style = BreadcrumbStyle.Default;
breadcrumb1.Separator = ">";

// 背景色样式
breadcrumb2.Style = BreadcrumbStyle.Background;

// 卡片样式
breadcrumb3.Style = BreadcrumbStyle.Card;

带图标的面包屑

csharp 复制代码
// 添加带图标的项
breadcrumb.Items.Add(new BreadcrumbItem
{
    Text = "首页",
    IconSvg = "home"
});

breadcrumb.Items.Add(new BreadcrumbItem
{
    Text = "用户管理",
    IconSvg = "user"
});

breadcrumb.Items.Add(new BreadcrumbItem
{
    Text = "用户详情",
    IconSvg = "profile",
    IsActive = true
});

点击事件

csharp 复制代码
// 项点击事件
breadcrumb.ItemClick += (sender, e) =>
{
    Console.WriteLine($"点击了:{e.Item.Text}");
    
    // 可以获取关联数据
    if (e.Item.Tag != null)
    {
        Console.WriteLine($"关联数据:{e.Item.Tag}");
    }
};

动态添加项

csharp 复制代码
// 动态添加面包屑项
private void AddBreadcrumbItem(string text, string iconSvg, object tag)
{
    // 取消之前的激活状态
    foreach (var item in breadcrumb.Items)
    {
        item.IsActive = false;
    }
    
    // 添加新项
    breadcrumb.Items.Add(new BreadcrumbItem
    {
        Text = text,
        IconSvg = iconSvg,
        Tag = tag,
        IsActive = true
    });
}

// 使用示例
AddBreadcrumbItem("订单管理", "order", null);
AddBreadcrumbItem("订单详情", "detail", orderId);

返回上一级

csharp 复制代码
// 返回上一级
private void GoBack()
{
    if (breadcrumb.Items.Count > 1)
    {
        breadcrumb.Items.RemoveAt(breadcrumb.Items.Count - 1);
        breadcrumb.Items[breadcrumb.Items.Count - 1].IsActive = true;
    }
}

数据绑定

csharp 复制代码
// 属性改变事件
breadcrumb.PropertyChanged += (sender, e) =>
{
    Console.WriteLine($"属性 {e.PropertyName} 已更改");
};

注意事项

  1. 激活状态:只能有一个激活项,设置新的激活项会自动取消之前的
  2. 图标类型:Icon 和 IconSvg 同时设置时,优先使用 IconSvg
  3. 分隔符:Style 为 Default 时才显示分隔符
  4. 点击事件:只有 Enabled 为 true 的项才会触发点击事件

三、后记

陆续补充完善中,如有需求,有好的建议,请留言(xue5zhijing)

相关推荐
FuckPatience8 小时前
Telerik UI for WPF 值不能为null。参数名:key
ui·wpf
breeze jiang10 小时前
从原生事件到 React 组件化:用状态驱动模型加载进度 UI
前端·react.js·ui
JaneConan1 天前
鸿蒙 ArkUI 深水区:@Watch 和 @Observed,状态变了「自动跑」+ 嵌套对象「深层重绘」
开发语言·后端·ui·harmonyos
施棠海1 天前
Pixel2XML实战:10分钟从设计稿做出一个能拨号的Android拨号盘页面(附完整业务代码)
android·java·ui
施棠海1 天前
设计稿一键变成可运行的Android页面:Pixel2XML全流程UI开发框架实战(附完整源码)
android·ui·架构
Helen_cai2 天前
OpenHarmony 通用状态加载、空页面、错误兜底组件封装(全局业务通用 UI 组件 API23)
开发语言·ui·华为·php·harmonyos
YM52e2 天前
鸿蒙 Flutter BoxDecoration装饰:打造精美UI效果
学习·flutter·ui·华为·harmonyos·鸿蒙
qq_463408422 天前
# 基于 HarmonyOS ArkTS 声明式 UI 构建智能音乐播放器:深色主题圆盘轮播、五 Tab 导航隔离、瀑布流收藏与悬浮迷你播放条实现深度解析
ui·华为·harmonyos
工业HMI实战笔记2 天前
【无标题】
大数据·人工智能·ui·自动化·人机交互·交互
帅次2 天前
Kotlin Flow 与 StateFlow:UI 单向数据流基础
开发语言·ui·kotlin·stateflow·onlifecycle