基于 YUI Color Picker 的 ASP.NET 颜色选择器控件






4.53/5 (9投票s)
基于 YUI Color Picker 的 ASP.NET 颜色选择器控件
- 在在线 IDE 中打开代码
- 下载包含示例的源代码 - 43 Kb
- 仅下载源代码 - 5 Kb
- 更新后的源代码可以在 CodePlex 找到。

引言
YuiColorPicker 是一个 ASP.NET 控件,可以在页面或控件中的各种方式下使用。顾名思义,它使用了方便的 YUI Color picker 控件。对于不熟悉 YUI 的朋友们,它是一组用于构建丰富交互式 Web 应用程序的 Javascript 实用程序和控件。它的文件通过 CDN 提供,这使得速度更快,并减轻了服务器的负担。该选择器控件提供了诸如动画、内联或模态弹出行为、YUI 库的动态加载以及客户端/服务器事件等功能。我最初为一位朋友编写这个控件,他非常喜欢颜色选择器控件,但又不想处理与基于 Javascript (非服务器) 的控件相关的复杂实现。
以往的工作
在 YUI 控件和 ASP.NET 技术的集成方面已经做了大量 工作。我发现其中大多数控件都不适合我的需求。特别是,它能够在对话框容器中显示控件,与其他服务器端和客户端代码良好集成,并且消耗的带宽很少。Alexander Turlov 的 这篇文章以及一些 其他文章 提供了一些不错的纯手工制作的颜色选择器。然而,YUI 库提供的选择器具有良好的外观和感觉,并提供了一些额外的酷功能。它还允许您将需求降至最低 - 无需服务器端渲染,也无需使用 ASP.NET Ajax Control Toolkit。
设计目标与架构
设计目标是
- 单一文件复制粘贴集成
- 无需 <include> 任何 CSS 或 JS 文件。YUI 加载器会自动包含所有必需的资源 (请参阅下方参考文档中的 LoadYui 属性)。
- 最小的服务器端渲染
- 使用流行且经过测试的控件 (YUI)
- 健壮性以及调整 YUI 控件各种功能的能力
- 通过包含单个 .CS 文件进行项目集成
- 浏览器和平台独立性
该控件可以放置在标记的任何位置。客户端 Javascript 代码嵌入在 C# 代码中。这样做是为了减少额外的请求,并使初始集成速度更快。未来的版本可能会允许您将此代码 (未压缩时约 3Kb) 放在您的 Web 服务器或 CDN 上。
Using the Code
基本用法
以下代码片段展示了最简单的颜色选择器使用方法
Default.aspx
...
<yui:YuiColorPicker
ID="YuiColorPicker1"
RunAt="server"
ColorPickerMode="Inline"
OnColorChanged="YuiColorPicker1_ColorChanged"
LoadYui="true"
/>
...
让我们来回顾一下上面颜色选择器的主要属性
- ColorPickerMode 属性的值为“Inline”。这将作为文档的一部分内联渲染颜色选择器。
- OnColorChanged 事件是一个服务器端事件,每当颜色选择器的值发生变化时,都会引发该事件。
- LoadYui 属性的值为“true”。这也是默认值,但值得一提的是,这将使用 YUI 加载器来引导所需的 YUI 库组件。如果您已经在页面中使用 YUI 库,请确保包含 colorpicker 模块,并将其设置为“false”。对于其余的示例,将省略此属性,因为我们将始终动态加载 YUI 库。
动画
以下代码片段展示了如何使用颜色选择器,并添加了一些动画效果
Default.aspx
...
<yui:YuiColorPicker
ID="YuiColorPicker1"
RunAt="server"
ColorPickerMode="Inline"
OnColorChanged="YuiColorPicker1_ColorChanged"
EnableAnimation="true"
Color="#ff0000"
/>
...
注释
- EnableAnimation 属性使颜色选择器产生轻微动画:选择新颜色时,选择器将从旧颜色平滑过渡到新颜色。
- Color 属性设置选择器的初始颜色。
浮动对话框
以下代码片段展示了如何在浮动对话框中使用颜色选择器。这允许您以一种非常不引人注目的方式添加颜色选择器
Default.aspx
...
<yui:YuiColorPicker
ID="YuiColorPicker1"
RunAt="server"
ColorPickerMode="FloatingDialog"
OnColorChanged="YuiColorPicker1_ColorChanged"
LoadYui="True"
/>
...
注释
- ColorPickerMode 属性的值为“FloatingDialog”。这会导致颜色选择器在浮动对话框中渲染。
浮动模态对话框
在此示例中,选择器将在浮动的模态对话框容器中渲染。当对话框可见时,整个文档将被遮盖且无法访问
Default.aspx
...
<yui:YuiColorPicker
ID="YuiColorPicker1"
runat="server"
ColorPickerMode="FloatingDialog"
ModalBehavior="true"
OnColorChanged="YuiColorPicker1_ColorChanged"
/>
...
注释
- ModalBehavior 结合“FloatingDialog”模式,会产生对话框行为。
客户端集成
ASP.NET YUI 颜色选择器控件为客户端代码提供了一些方便的集成点。这是通过在控件本身上公开服务器端方法来实现的
Default.aspx
...
<yui:YuiColorPicker
ID="YuiColorPicker1"
runat="server"
ColorPickerMode="Inline"
ModalBehavior="false"
EnableAnimation="false"
OnColorChanged="YuiColorPicker1_ColorChanged"
UpdateMode="Continuous"
/>
...
<asp:Button ID="Button1" runat="server" Text="Postback" OnClick="Btn_Click" />
<input type="button" ID="btnShow" runat="server" value="Show" />
<input type="button" ID="btnHide" runat="server" value="Hide" />
<input type="button" ID="btnGetValue" runat="server" value="ShowValue" />
...
Default.aspx.cs
protected void Page_Load(object sender, EventArgs e)
{
btnShow.Attributes["onclick"] = YuiColorPicker1.GetClientShowPickerScript();
btnHide.Attributes["onclick"] = YuiColorPicker1.GetClientHidePickerScript();
btnGetValue.Attributes["onclick"] = "alert('color picker value is '+" + YuiColorPicker1.GetClientGetPickerValueScript() + ");";
YuiColorPicker1.OnClientColorChanged = "document.body.style.backgroundColor = '#'+" + YuiColorPicker1.GetClientGetPickerValueScript()+";";
}
注释
- GetClientGetPickerValueScript() 将返回一个 Javascript 表达式 (作为字符串),该表达式将计算为选定的颜色。
- GetClientShowPickerScript() 将返回一个 Javascript 语句 (作为字符串),该语句将导致颜色选择器显示。
- GetClientHidePickerScript() 将返回一个 Javascript 语句 (作为字符串),该语句将导致颜色选择器隐藏。
- OnClientColorChanged 属性可以包含一些 Javascript 代码,这些代码将在选定值更改时执行。与上述方法结合使用,您可以获得一些不错的效果。
多个实例
多个控件实例工作得很好。您可以 在线测试。
完整参考
属性 | |
---|---|
ColorPickerMode | FloatingDialog - (默认) 颜色选择器将渲染到一个浮动的对话框容器中。 当选择器不需要一直可见和可用,或者您不希望它干扰页面布局时,请使用此选项。 Inline - 颜色选择器将渲染到文档中。 当选择器需要一直可见并作为页面的一部分可用时,请使用此选项。 |
UpdateMode | Continuous - (默认) 当用户单击颜色时 (甚至在确认颜色之前),颜色选择器将立即触发客户端/回调事件。 当您想要可视化或以其他方式响应选定的颜色时,请使用此选项。 OnConfirm - 颜色选择器仅在用户通过单击“确定”来批准颜色时,才会触发客户端/回调事件。 (仅当 ColorPickerMode 为 FloatingDialog 时可用) |
EnableAnimation | 设置为 true 时,颜色选择器将产生轻微动画:选择新颜色时,选择器将从旧颜色平滑过渡到新颜色 |
ModalBehavior | 当使用 FloatingDialog 模式时,这将使浮动对话框变为模态,在显示时遮盖其余文档。 |
UseCallback | 如果您使用 ASP.NET 回调 (例如在 ASP.NET Ajax 中),将此属性设置为 true 将在值更改时触发回调。 (另请参阅 UpdateMode 属性) |
RGB | 这保存了选定的 RGB 值。它可以被赋值或从中读取。 |
IsHidden | 将其设置为 false 将在下一次回发时隐藏选择器。您可以使用 GetClientShowPickerScript() 在客户端动态显示它。 |
ShowControls | 隐藏/显示所有控件 |
ShowHexControls | 隐藏/显示十六进制控件 |
ShowHexSummary | 隐藏/显示十六进制摘要 |
ShowHSVControls | 隐藏/显示 HSV 控件 |
ShowRGBControls | 隐藏/显示 RGB 控件 |
ShowWebSafe | 隐藏/显示 WebSafe 色板 |
LoadYui | 这将通过 YUI Loader 动态加载 YUI 库。 如果您已经在页面中包含了 YUI,请确保包含 colorpicker 模块。 |
OnClientColorChanged | 每当值更改时执行的 Javascript 代码。(另请参阅 UpdateMode 属性) |
事件 | |
ColorChanged | 每当颜色选择器值发生变化时触发的服务器端事件。 |
方法 | |
GetClientHidePickerScript | 服务器端方法,返回一个 Javascript 语句 (作为字符串),该语句将导致颜色选择器隐藏。 |
GetClientShowPickerScript | 服务器端方法,返回一个 Javascript 语句 (作为字符串),该语句将导致颜色选择器显示。 |
GetClientGetPickerValueScript | 服务器端方法,返回一个 Javascript 表达式 (作为字符串),该表达式将计算为选定的颜色。 |
未来版本
编写这个控件让我非常开心。我很乐意收到反馈和功能请求。在此期间,这是我的清单:
- 添加一个 ExternalWindow 的 ColorPickerMode 选项,该选项将在一个单独的外部窗口 (例如 window.open) 中渲染选择器。
- 添加一个 Button 的 ColorPickerMode 选项,该选项会将选择器渲染在一个按钮旁边,类似于下拉框。
- 移除 ModalBehavior 并添加另一个 ColorPickerMode - ModalFloatingDialog。
- 能够将 JavaScript 代码放在外部文件中,并将其放在 CDN / 您的网站上以进行缓存、最小化和 GZip 压缩。
- 支持一些 JQuery 颜色选择器,它们可能需要更少的代码并提供一些额外的功能。
- 与一些不错的 JQuery 弹出窗口集成。
- 启用 AutoPostback 功能
关注点
这里有一些有用的链接:
编码愉快!