我有一個Compact Framework(3.5)控件,我希望它具有默認顏色SystemColors.Window
,與編輯控件相似。我遇到的問題是Visual Studio(2008)總是使用默認的BackColor
的Control
來渲染設計圖面上的控件。我假設它要麼從基礎Control
的默認背景顏色,父項或Site
中拉出。如何在自定義的CF控件中重寫Ambient BackColor
任何人都有任何想法如何指定或以其他方式通知Visual Studio默認的BackColor應該是什麼?
public class MoneyInput : Control
{
public MoneyInput()
{
base.BackColor = SystemColors.Window;
base.ForeColor = SystemColors.WindowText;
}
public override Color BackColor
{
get
{
return base.BackColor;
}
set
{
base.BackColor = value;
Repaint();
}
}
}
這裏是我的DesignTimeAttributes.xmta文件的相應部分。請注意,我真的不希望默認的顏色爲白色,你看下面,我只是試圖讓什麼工作:
<DesktopCompatible>true</DesktopCompatible>
<Property Name="BackColor">
<Browsable>true</Browsable>
<DesignerSerializationVisibility>
DesignerSerializationVisibility.Visible
</DesignerSerializationVisibility>
<DefaultValue>
<Type>System.Drawing.Color</Type>
<Value>System.Drawing.Color.White</Value>
</DefaultValue>
<Category>Appearance</Category>
<Description>The background color of the control</Description>
</Property>
只需添加更多一些進展(或缺乏),我在控件中添加了一個日誌,以便在設計界面上放下控件時可以看到發生了什麼。在構造函數中對BackColor的寫入確實生效,並將顏色從「控制」更改爲「窗口」。但是,然後設計器基礎設施中的某些東西將顏色(通過屬性)設置回Control。這發生在ctor之後但在OnResize和OnHandleCreated之前。現在,如果控件使用正確的值將BackColor屬性序列化到設計器中,那麼它將安全地返回,但設計器不包含默認值。
最後一次編輯,我認爲用於指定枚舉(而不是基本類型)的默認值語法不正確。我正在使用我在下面發佈的解決方案,但這是一種破解,希望下一個出現的人能夠真正解決它。
你可以創建一個'OnShow'事件和色彩的控制呢? – jp2code 2012-01-31 19:22:55
@ jp2code無法覆蓋的OnShow方法。 – tcarvin 2012-01-31 19:44:31