BootstrapBlazor颜色选择器:ColorPicker组件使用详解

BootstrapBlazor颜色选择器:ColorPicker组件使用详解

【免费下载链接】BootstrapBlazor 【免费下载链接】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. 组件参数

参数名类型默认值描述
Valuestringnull绑定颜色值,支持HEX、RGB、RGBA格式
IsSupportOpacityboolfalse是否支持透明度调节
IsDisabledboolfalse是否禁用组件
SwatchesList null颜色预设集合,格式为颜色字符串数组
FormatterFunc<string, Task > null颜色值格式化回调函数
TemplateRenderFragment null自定义输入框模板
OnValueChangedEventCallback -颜色值变更事件回调

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设计和丰富的功能特性,为开发者提供了便捷的颜色选择解决方案。本文详细介绍了组件的基础用法、高级特性和实际应用场景,涵盖了从简单绑定到复杂主题定制的完整使用流程。

通过合理配置IsSupportOpacitySwatches等参数,结合FormatterTemplate自定义功能,可以满足各种颜色选择需求。建议开发者在实际项目中根据具体场景选择合适的配置方案,以获得最佳的用户体验。

9. 相关资源

【免费下载链接】BootstrapBlazor 【免费下载链接】BootstrapBlazor 项目地址: https://gitcode.com/gh_mirrors/bo/BootstrapBlazor

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值