在visual studio中,在標記(或代碼隱藏)中創建控件時,可以用十六進制格式指定顏色,如下所示:「#FFFFFF」,但您也可以從預設顏色列表如:白色,小麥,窗口等(請參見截圖)。
是否可以擴展該列表並添加其他顏色?
將顏色選項添加到System.Drawings.Color
回答
不直接,因爲你不能創建擴展屬性。
一種解決方案是使一個擴展方法
public static Color MyNewColor(this Color str)
{
return Color.FromArgb(255, 255, 255, 255);
}
這可以然後從 (new Color()).MyNewColor()
所以稍有不同,可能是因爲它正在創建兩種顏色,而不是一個如現有的效率不高調用屬性,但會實現你正在尋找..
此列表基於System.Drawing.KnownColor
枚舉值。作爲枚舉cannot be extended和你cannot inherit from another enum,如果你想創建列表中使用更多的命名顏色在你自己的代碼中使用,你必須實現自己的枚舉與手動添加這些值,並與你希望在那裏看到更多的值。
而且,當然,還有System.Drawing.KnownColor
enum在Color
結構中有一個方法用於獲取此已命名顏色的值 - Color.FromKnownColor
。我認爲你還應該將擴展方法添加到Color
結構中,它將爲你自己的枚舉做相同的處理,因爲FromKnownColor
方法對於KnownColor
枚舉。也許你甚至可以在你自己的擴展方法中使用FromKnownColor
方法來簡化這個標準枚舉中已經存在的顏色。
但是,如果您想要做的唯一事情就是在ASP.NET設計器中擴展這一個列表,那麼您無法在您自己的項目中進行任何更改或通過更改VS中的選項來執行此操作。也許你可以在Visual Studio中編寫一個插件來完成這個任務,但這是我看到的唯一方法,如果這是你想要做的。
編輯:如果繼承的控制是一個選擇,也許是最好的答案,你可以得到的是一個由建議simplecoder,作爲described in his answer - 基於舊與新枚舉創建自己的控制綁定到您想要使用新顏色的屬性的值。
您需要編寫自己的控件併爲Visual Studio添加設計時支持。這可以讓你直接從VS工具箱使用它。爲了快速的解決方案考慮定義的顏色代碼後面使用此代碼:
using System.Drawing;
this.myButton.BackColor = ColorTranslator.FromHtml("#FF0000");
由於@Sayse指出,你不能創建擴展屬性:爲什麼呢?閱讀:MSDN Blog 一種做法是創建Extesion方法並使用它。 @Sayse指出 @Konrad用KnownColor Enum指出了這個問題
所以這裏有一個小小的扭曲的解決方案。
通過繼承控制類,我認爲這應該工作。這隻涉及很少的工作,但一旦你掌握了它,它就非常簡單。
- 繼承Control類如MyCustomButton繼承System.web.UI.WebControls.Button
- 創建一個新的屬性BackColor2,消耗的MyColor的新枚舉
覆蓋的背景色屬性,背景色被定義父類巴頓是
System.Web.Ui.WebControls.WebControl做背景色設置屬性爲私人並將其鏈接到背景色2
如果您需要現有顏色,然後將它們複製到新的枚舉中。使用反射
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Drawing;
using System.ComponentModel;
namespace ClassLibrary1
{
public class MyButton : System.Web.UI.WebControls.Button
{
[DefaultValue(typeof(Color), "")]
public virtual Color BackColor
{
get
{
if (!this.ControlStyleCreated)
return Color.Empty;
else
return this.ControlStyle.BackColor;
}
private set
{
// this.ControlStyle.BackColor = value; , OVerride it with your MyColor
this.ControlStyle.BackColor =YourMethodConvertMyColorToColor(this.BackColor2);
}
}
private Color YourMethodConvertMyColorToColor(MyColor c){
//your implementation
if (c == MyColor.MyColorGreen)
{
return ColorTranslator.FromHtml("#FF0000"); ; //just example
}
return Color.Green;//default
}
MyColor _mycolor; //Global Value
[DefaultValue(typeof(MyColor), "")]
public MyColor BackColor2
{
get
{
return _mycolor;
}
set
{
this._mycolor = value;
}
}
}
public enum MyColor
{
MyColorGreen=1,
MyColorBlue=2
}
}
編輯:的System.Drawing.Color是結構,因此它不能被繼承。這是顯示塞子。這就是爲什麼我認爲繼承控制只是一個解決方案
此外,我試圖添加一個擴展方法像這樣,它並沒有爲我工作。在設計師中我看不到myColor
public static class MyExtensions
{
public static System.Drawing.Color MyColor(this System.Drawing.Color c)
{
return Color.AliceBlue; // could be your color
}
}
您可以創建包含已有列表中所有顏色的自己的下拉列表。
Dim colorList as new DropDownList()
Dim colorArray As String() = System.Enum.GetNames(GetType(KnownColor))
colorList.DataSource = colorArray
colorList.DataBind()
現在您可以將自己的手動顏色添加到列表中。
colorList.Items.Add(newcolor.ToString)
ofcourse使用它,你必須創建自己的Visual Studio插件在Visual Studio IDE中。
它是Visual Studio加載項而不是組件設計器類? – dekdev 2013-05-03 12:19:54
您確實無法編輯.Net Framework提供的此列表以添加您選擇的其他顏色。原因很明顯,正如@Konrad Gadzina在上面的文章中總結的。您可以按照@simplecoder的建議選擇替代方式。
但我寧願說,使用選擇顏色功能來抓住你的選擇顏色,而不是經歷所有這些困難的方式。
- 1. 將顏色添加到顏色數組
- 2. 如何將背景顏色添加到HTML選項?
- 3. 將顏色轉換添加到新添加的Listview項目
- 4. VS2010 SDK - 將顯示項目添加到字體和顏色選項對話框
- 5. 將顏色條添加到表matplotlib
- 6. 將顏色添加到syncfusion ColorpickerPalette控件
- 7. 將顏色添加到前塊
- 8. Swift - 將顏色添加到CGrect
- 9. 將顏色條添加到現有軸
- 10. 將顏色層添加到mandelbrot集
- 11. 將顏色添加到矩形
- 12. 將顏色添加到灰度BufferedImage
- 13. 爲顏色添加顏色
- 14. 將顏色條添加到3變量顏色圖
- 15. 將選項添加到選項中
- 16. 將選項添加到IKSaveOptions?
- 17. 將選項添加到wp_dropdown_categories
- 18. 將選項添加到Charts.js
- 19. 將背景顏色添加到列表項目bullet
- 20. 將顏色選擇器添加到iOS應用程序
- 21. 將樣式顏色添加到添加的li - Javascript
- 22. 添加選項卡與選定的假但選項卡設置顏色tabSelectedTextColor
- 23. 通過顏色選項更改顏色
- 24. 將項目添加到選定項目
- 25. 將選項添加到CodeIgniter中選擇
- 26. 將選定的選項添加到Select2
- 27. 選擇框選項顏色:
- 28. WPF顏色選擇器 - 添加新的自定義顏色
- 29. Angular.js - 爲添加到待辦事項列表的項目添加顏色/類
- 30. 如何給Android中的選項菜單添加顏色?
這可能來自SystemColor類,因此沒有簡單的方法來擴展列表。 – 2013-04-26 22:49:31
@WiktorZychla System COlor is structure not class - http://msdn.microsoft.com/en-us/library/system.drawing.color.aspx – dekdev 2013-05-03 11:31:08
@WiktorZychla System.Drawing.Color是Structure並且不能繼承 – dekdev 2013-05-03 11:40:22