2011-06-24 59 views
0

我有一個包含所有其他控件的面板的自定義控件。控件處於兩種狀態之一,即編輯模式和正常模式。在編輯模式下,我希望控件具有不同背景色的選項。將顏色保存到ViewState

我:

在Pre_Render:

Panel1.BackColor = EditMode ? BackEditColor : BackColor; 

而且控件的屬性:

[Bindable(true)] 
[Category("Misc")] 
[Description("The background color.")] 
[DefaultValue("white")] 
[Localizable(true)] 
public Color BackColor 
{ 
    get { return Color.FromName(Convert.ToString(ViewState["BackColor"] ?? "white")); } 
    set { ViewState["BackColor"] = value.Name; } 
} 

[Bindable(true)] 
[Category("Misc")] 
[Description("The edit-mode background color.")] 
[DefaultValue("#FFFFCC")] 
[Localizable(true)] 
public Color BackEditColor 
{ 
    get { return Color.FromName(Convert.ToString(ViewState["BackEditColor"] ?? "#FFFFCC")); } 
    set { ViewState["BackEditColor"] = value.Name; } 
} 

我可以設置通過控件的屬性沒有問題的顏色,但他們只表演作爲呈現白色。我應該如何保存/閱讀ViewState的顏色?

+0

您是否驗證過調用Pre_Render方法? – StriplingWarrior

回答

1

如何只:

public Color BackColor 
{ 
    get { return (Color)(ViewState["BackColor"] ?? Color.White); } 
    set { ViewState["BackColor"] = value; } 
} 
+0

感謝Magnus - 我只是想出了自己的想法,而對於BackEditColor的默認設置,我使用了Color.FromName(「#FFFFCC」)。 –

1

Color.FromName( 「#FFFFCC」)將無法正常工作,因爲它僅適用於像 '黑' 預定義的名稱。

您可以簡單地將Color對象本身置於視圖狀態。

+0

實際上它確實是這樣工作的 - 嘗試它 –

+0

不,你需要使用ColorTranslator:'ColorTranslator.FromHtml(「#FFFFCC」);' – Magnus

+0

它設置名稱,但它不設置實際顏色。這會導致你的問題。我試過_int redPart = Color.FromName(「#FFFFFFFF」)。R; _這將返回0而不是255。 –