コンパクトフレームワーク(3.5)コントロールがあり、デフォルトの色はSystemColors.Window
で、編集コントロールと似ています。私が抱えている問題は、Visual Studio(2008)は常に、デフォルトのBackColor
(Control
)のデザインサーフェス上のコントロールをレンダリングすることです。私はそれがベースControl
のデフォルトのバックカラー、親から、またはSite
からそれを引っ張っていると仮定します。カスタムCFコントロールのアンビエント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への書き込みは有効になり、コントロールからウィンドウに色が変更されます。しかし、デザイナーのインフラストラクチャでは、(プロパティを介して)コントロールに色を戻します。これはctorの後で、OnResizeとOnHandleCreatedの前に発生します。コントロールが正しい値でデザイナにBackColorプロパティをシリアル化した場合、それは安全に設定されますが、デザイナには既定値が含まれません。
最後に編集したのは、(ベースタイプではなく)列挙型を指定するためのデフォルト値構文が正しくないと思います。私は以下に投稿したソリューションを使用していますが、それはハックであり、うまくいけば次の人が実際にそれを解決することができます。
あなたは 'OnShow'イベントを作成し、そこにあなたのコントロールを色付けすることはできますか? – jp2code
@ jp2codeオーバーライドするOnShowメソッドはありません。 – tcarvin