BootstrapBlazor颜色选择器:ColorPicker组件使用详解
【免费下载链接】BootstrapBlazor 项目地址: https://gitcode.com/gh_mirrors/bo/BootstrapBlazor
1. 组件概述
ColorPicker(颜色选择器)是BootstrapBlazor框架中用于直观选择颜色的交互组件,支持RGB、HEX和RGBA等多种颜色格式,并提供透明度调节、自定义颜色预设等高级功能。该组件广泛应用于主题定制、数据可视化、个性化设置等场景,通过简洁的UI设计和丰富的交互方式,帮助用户快速完成颜色选择操作。
2. 快速开始
2.1 基础用法
最简单的ColorPicker组件使用方式仅需绑定颜色值属性:
<ColorPicker @bind-Value="@currentColor" />
@code {
private string currentColor { get; set; } = "#ff0000";
}
2.2 国内CDN资源引用
在使用ColorPicker组件前,需确保项目已正确引用BootstrapBlazor资源。推荐使用国内CDN加速访问:
<!-- 引入 BootstrapBlazor CSS -->
<link href="https://cdn.masastack.com/blazor/bootstrap-blazor/7.0.0/css/bootstrap-blazor.min.css" rel="stylesheet">
<!-- 引入 BootstrapBlazor JS -->
<script src="https://cdn.masastack.com/blazor/bootstrap-blazor/7.0.0/js/bootstrap-blazor.min.js"></script>
3. 核心功能与代码示例
3.1 颜色值绑定
ColorPicker支持多种绑定方式,满足不同场景需求:
3.1.1 单向绑定
<DemoBlock Title="单向绑定示例">
<ColorPicker Value="@currentColor" OnValueChanged="@OnColorChanged" />
<div class="mt-3">当前选择颜色: @currentColor</div>
</DemoBlock>
@code {
private string currentColor { get; set; } = "#4CAF50";
private void OnColorChanged(string value)
{
currentColor = value;
StateHasChanged();
}
}
3.1.2 双向绑定
<DemoBlock Title="双向绑定示例">
<ColorPicker @bind-Value="@currentColor" />
<div class="mt-3">当前选择颜色: @currentColor</div>
</DemoBlock>
@code {
private string currentColor { get; set; } = "#2196F3";
}
3.2 透明度支持
通过IsSupportOpacity参数启用透明度调节功能,此时颜色值将以RGBA格式返回:
<DemoBlock Title="透明度调节示例">
<ColorPicker @bind-Value="@rgbaColor" IsSupportOpacity="true" />
<div class="mt-3">带透明度颜色值: @rgbaColor</div>
</DemoBlock>
@code {
private string rgbaColor { get; set; } = "rgba(156, 39, 176, 0.7)";
}
3.3 禁用状态
设置IsDisabled参数可禁用颜色选择器交互:
<DemoBlock Title="禁用状态示例">
<ColorPicker Value="#9E9E9E" IsDisabled="true" />
<div class="text-muted mt-2">组件已禁用,无法选择颜色</div>
</DemoBlock>
3.4 自定义颜色预设
通过Swatches参数设置常用颜色预设,提升用户选择效率:
<DemoBlock Title="自定义颜色预设示例">
<ColorPicker @bind-Value="@swatchColor"
IsSupportOpacity="true"
Swatches="@customSwatches" />
</DemoBlock>
@code {
private string swatchColor { get; set; } = "rgba(33, 150, 243, 1)";
private List<string> customSwatches = new()
{
"rgba(244, 67, 54, 1)",
"rgba(233, 30, 99, 0.95)",
"rgba(156, 39, 176, 0.9)",
"rgba(103, 58, 183, 0.85)",
"rgba(63, 81, 181, 0.8)",
"rgba(33, 150, 243, 0.75)",
"rgba(3, 169, 244, 0.7)",
"rgba(0, 188, 212, 0.65)",
"rgba(0, 150, 136, 0.6)",
"rgba(76, 175, 80, 0.55)",
"rgba(139, 195, 74, 0.5)",
"rgba(205, 220, 57, 0.45)"
};
}
4. 高级特性
4.1 自定义格式化显示
使用Formatter参数自定义颜色值的显示格式:
<DemoBlock Title="自定义格式化示例">
<ColorPicker @bind-Value="@formattedColor"
Formatter="@FormatColorValue" />
</DemoBlock>
@code {
private string formattedColor { get; set; } = "#2196F3";
private async Task<string> FormatColorValue(string color)
{
// 转换为颜色名称显示(需要颜色转换库支持)
return await Task.FromResult($"Selected: {color.ToUpper()}");
}
}
4.2 模板化显示
通过Template参数完全自定义输入框显示内容:
<DemoBlock Title="模板化显示示例">
<ColorPicker Value="@templateColor"
OnValueChanged="@OnTemplateColorChanged">
<Template>
<div class="input-group">
<span class="input-group-text" style="background-color: @templateColor; width: 30px;"></span>
<input type="text" class="form-control"
value="@templateColor"
readonly
placeholder="选择颜色">
<button class="btn btn-outline-secondary" type="button">
<Icon Name="fa-solid fa-eyedropper" />
</button>
</div>
</Template>
</ColorPicker>
</DemoBlock>
@code {
private string templateColor { get; set; } = "#4CAF50";
private Task OnTemplateColorChanged(string value)
{
templateColor = value;
StateHasChanged();
return Task.CompletedTask;
}
}
4.3 表单验证集成
ColorPicker可与ValidateForm组件无缝集成,实现颜色选择的表单验证:
<DemoBlock Title="表单验证示例">
<ValidateForm Model="@formModel" OnValidSubmit="@HandleSubmit">
<div class="row g-3">
<div class="col-12">
<ColorPicker @bind-Value="@formModel.PrimaryColor" />
<ValidationMessage For="@(() => formModel.PrimaryColor)" />
</div>
<div class="col-12">
<button type="submit" class="btn btn-primary">提交</button>
</div>
</div>
</ValidateForm>
</DemoBlock>
@code {
private ColorFormModel formModel = new();
private void HandleSubmit()
{
// 处理表单提交逻辑
Console.WriteLine($"表单提交 - 主色调: {formModel.PrimaryColor}");
}
public class ColorFormModel
{
[Required(ErrorMessage = "请选择主色调")]
public string PrimaryColor { get; set; } = string.Empty;
}
}
5. 组件参数
| 参数名 | 类型 | 默认值 | 描述 |
|---|---|---|---|
| Value | string | null | 绑定颜色值,支持HEX、RGB、RGBA格式 |
| IsSupportOpacity | bool | false | 是否支持透明度调节 |
| IsDisabled | bool | false | 是否禁用组件 |
| Swatches | List | null | 颜色预设集合,格式为颜色字符串数组 |
| Formatter | Func<string, Task > | null | 颜色值格式化回调函数 |
| Template | RenderFragment | null | 自定义输入框模板 |
| OnValueChanged | EventCallback | - | 颜色值变更事件回调 |
6. 应用场景示例
6.1 主题颜色定制
<DemoBlock Title="主题颜色定制">
<div class="card">
<div class="card-header">
<h5 class="mb-0">自定义系统主题</h5>
</div>
<div class="card-body">
<div class="row g-3">
<div class="col-md-6">
<label class="form-label">主色调</label>
<ColorPicker @bind-Value="@themeColors.Primary"
Swatches="@themeSwatches" />
</div>
<div class="col-md-6">
<label class="form-label">辅助色</label>
<ColorPicker @bind-Value="@themeColors.Secondary"
Swatches="@themeSwatches" />
</div>
<div class="col-md-6">
<label class="form-label">成功色</label>
<ColorPicker @bind-Value="@themeColors.Success"
Swatches="@themeSwatches" />
</div>
<div class="col-md-6">
<label class="form-label">警告色</label>
<ColorPicker @bind-Value="@themeColors.Warning"
Swatches="@themeSwatches" />
</div>
<div class="col-md-6">
<label class="form-label">危险色</label>
<ColorPicker @bind-Value="@themeColors.Danger"
Swatches="@themeSwatches" />
</div>
<div class="col-md-6">
<label class="form-label">信息色</label>
<ColorPicker @bind-Value="@themeColors.Info"
Swatches="@themeSwatches" />
</div>
</div>
<div class="mt-4">
<h6>预览</h6>
<div class="d-flex gap-2 mt-2">
<div class="p-3 rounded" style="background-color: @themeColors.Primary; color: white;">主色调</div>
<div class="p-3 rounded" style="background-color: @themeColors.Secondary; color: white;">辅助色</div>
<div class="p-3 rounded" style="background-color: @themeColors.Success; color: white;">成功色</div>
</div>
</div>
</div>
</div>
</DemoBlock>
@code {
private ThemeColorConfig themeColors = new()
{
Primary = "#0d6efd",
Secondary = "#6c757d",
Success = "#198754",
Warning = "#ffc107",
Danger = "#dc3545",
Info = "#0dcaf0"
};
private List<string> themeSwatches = new()
{
"#0d6efd", "#6c757d", "#198754", "#ffc107", "#dc3545", "#0dcaf0",
"#fd7e14", "#20c997", "#6610f2", "#fd7e14", "#28a745", "#ffc107"
};
public class ThemeColorConfig
{
public string Primary { get; set; } = "#0d6efd";
public string Secondary { get; set; } = "#6c757d";
public string Success { get; set; } = "#198754";
public string Warning { get; set; } = "#ffc107";
public string Danger { get; set; } = "#dc3545";
public string Info { get; set; } = "#0dcaf0";
}
}
6.2 数据可视化配色
<DemoBlock Title="图表配色方案">
<div class="card">
<div class="card-body">
<h5 class="card-title mb-4">自定义图表配色</h5>
<div class="mb-4">
<label class="form-label">图表系列颜色</label>
<div class="d-flex flex-wrap gap-2 mb-3">
@foreach (var (color, index) in chartColors.Select((c, i) => (c, i)))
{
<div class="d-flex align-items-center gap-2">
<ColorPicker @bind-Value="@chartColors[index]"
Style="width: 100px;"
Swatches="@chartSwatches" />
<div class="w-3 h-3 rounded"
style="background-color: @color;"></div>
</div>
}
</div>
</div>
<div class="bg-light p-3 rounded">
<h6 class="mb-3">预览</h6>
<div class="chart-container" style="height: 300px;">
<!-- 此处应显示使用所选颜色的图表 -->
<div class="d-flex justify-content-center align-items-center h-100 text-muted">
图表预览区域 (实际项目中集成Chart.js等图表库)
</div>
</div>
</div>
</div>
</div>
</DemoBlock>
@code {
private List<string> chartColors = new()
{
"#0d6efd", "#198754", "#ffc107", "#dc3545", "#20c997", "#6610f2"
};
private List<string> chartSwatches = new()
{
"#0d6efd", "#198754", "#ffc107", "#dc3545", "#20c997", "#6610f2",
"#fd7e14", "#28a745", "#ff851b", "#8a2be2", "#00ffff", "#ff69b4"
};
}
7. 常见问题解决
7.1 颜色格式转换问题
ColorPicker默认支持多种颜色格式,但在实际开发中可能需要进行格式转换:
// HEX转RGBA示例方法
public static string HexToRgba(string hex, double alpha = 1.0)
{
if (hex.StartsWith("#"))
hex = hex[1..];
if (hex.Length == 3)
hex = string.Concat(hex.Select(c => c.ToString() + c.ToString()));
if (hex.Length == 6)
{
var r = int.Parse(hex[0..2], System.Globalization.NumberStyles.HexNumber);
var g = int.Parse(hex[2..4], System.Globalization.NumberStyles.HexNumber);
var b = int.Parse(hex[4..6], System.Globalization.NumberStyles.HexNumber);
return $"rgba({r}, {g}, {b}, {alpha:0.##})";
}
return hex;
}
7.2 组件初始化问题
确保在组件初始化时正确设置颜色值,避免初始状态异常:
protected override async Task OnInitializedAsync()
{
// 确保颜色值初始化
if (string.IsNullOrEmpty(currentColor))
{
currentColor = IsSupportOpacity ? "rgba(0, 0, 0, 1)" : "#000000";
}
await base.OnInitializedAsync();
}
8. 总结
ColorPicker组件作为BootstrapBlazor框架中的重要交互组件,通过直观的UI设计和丰富的功能特性,为开发者提供了便捷的颜色选择解决方案。本文详细介绍了组件的基础用法、高级特性和实际应用场景,涵盖了从简单绑定到复杂主题定制的完整使用流程。
通过合理配置IsSupportOpacity、Swatches等参数,结合Formatter和Template自定义功能,可以满足各种颜色选择需求。建议开发者在实际项目中根据具体场景选择合适的配置方案,以获得最佳的用户体验。
9. 相关资源
【免费下载链接】BootstrapBlazor 项目地址: https://gitcode.com/gh_mirrors/bo/BootstrapBlazor
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考



