2009-04-30 14 views
2

大きなC#アプリケーションを作成するには 重要な点は、コントロールの色をアプリケーションのユーザーが調整できることです。 System.Drawing.SystemColorsをオーバーライドするソリューション(このアプリケーションのコンテキストのみ)があれば、本当に便利です。すべてのコントロールの値を手作業で設定する必要はありません。 誰かが私の問題の解決策を知っていますか?これは簡単ですか? ありがとうC#アプリケーションのワイドカラーマネージメント

+0

System.Drawing.SystemColorsについて言及しているので、これはWPFではなくWinformsと仮定します。 –

答えて

0

システムのデフォルトを上書きする必要はありませんが、独自の色を定義することができます。バインディングを設定するアプリケーションで

Color NastyColour = Color.FromArgb(1, 2, 3); 

1 =レッド 2 =緑 3 =ブルー

1

ルック。どのようにすべてのコントロールのためにこれを行うかはわかりませんが、単にコントロールツリーを通して再帰するだけで十分です。

0

残念ながら、あなたのアプリケーションのためだけにWindowsの配色を変更することはできません。

Winformsでは、フォーム上のすべてのコントロールの背景色などを変更することができますが、多くの領域(ボタンやウィンドウタイトルバーの斜め色など)では、おそらく描画に頼る必要があります自分でコントロールする。

1

各コントロールを継承し、デフォルトの表示プロパティを設定することをお勧めします。これにより、簡単にカスタマイズして再利用できる標準のWinFormsコントロールのライブラリが提供されます。さらに詳しい情報here(VBでは、C#でサンプルが見つかりませんでした)。

0

私は以下のようなコードを書きました。私はそれが普通ではない任意のコントロールのための特殊な処理を必要とするので、特に満足していないが、それは仕事をした。 Painterのインスタンスを保持し、フォームを作成してフォームを引数として渡すたびに「適用」を呼び出します。それは、すべての子コントロールを再帰し、外観を変更します。

public class Painter 
{ 
    Color foreColor; 
    Color backColor; 
    Color altBackColor; 
    Color buttonColor; 
    Font font; 

    public Painter(Color foreColor, Color backColor, Color altBackColor, Color buttonColor, Font font) 
    { 
     this.foreColor=foreColor; 
     this.backColor=backColor; 
     this.altBackColor=altBackColor; 
     this.buttonColor=buttonColor; 
     this.font=font; 
    }  

    public void Apply(Control c) 
    { 
     if(c==null) 
      return; 

     c.ForeColor = foreColor; 

     c.BackColor = (c is Button) ? buttonColor 
            : backColor; 

     if (c is DataGridView) 
     { 
      var dgv = (DataGridView) c; 
      dgv.BackgroundColor = BackColor; 
      dgv.AlternatingRowsDefaultCellStyle.BackColor = altBackColor; 
      dgv.ColumnHeadersDefaultCellStyle.BackColor = buttonColor; 
     } 

     c.Font = font; 

     foreach(Control child in c.Controls) 
      Apply(child); 
    } 
} 
-1

$ 1000を払い、DevExpressのコピーを入手してください。私たちはフレームワークを使用して大きなアプリケーションを作成しており、スキニング機能は素晴らしいです。

これは最高の答えのようには聞こえませんが、アプリケーション全体のスキニング機能を探している場合は、サードパーティのライブラリが適切かもしれません。

関連する問題