C#のWPFで色選択コントロールを自作する その1

WPFのユーザーコントロールやテンプレートの仕組みを使って色を選択するコントロールを作成してみる 

 

こんな感じのやつ。その名もColorPicker。

ComboBoxをベースにしている。

コントロールをクリックすると、カラーパレットが表示されそこから色を選択出来るというもの。

もっと細かく色を作りたい時は「その他の色...」というところからColorDialogを表示させる仕組み。

 

 

SelectedColorというColor型のプロパティを作って、データソースへバインド出来るようにする。

 「WPFでコントロールを自作する」や

 「WPFでコントロールを自作する その2」を参照

 

ドロップダウンで表示されるComboBoxItemはItemTemplateを使ってBorderコントロールで表示。

 「WPFでComboBoxの表示をカスタマイズ」を参照

 

ItemsPanelTemplateを使ってGridを配置し、ComboBoxItemを縦横に並べている。

 「WPFでComboBoxの表示をカスタマイズ その2」を参照

 

カラーパレットは大まかに3段に分かれていて、グレースケール、基本色、グラデーションとしている。

段落間に開いたスペースはComboBoxのグループヘッダーの仕組みを使っている。

 「WPFのComboBoxでグループ毎に表示させる」を参照

 

「その他の色...」の部分のグループヘッダーを使っていて、HeaderTemplateSelectorによって使用するHeaderTemplateを切り替えている。

 「WPFで複数のテンプレートを切り替えて使う」を参照

 

 

つづく

 

 

コメントをお書きください

コメント: 2
  • #1

    wpf初心者ですマン (金曜日, 26 1月 2024 10:29)

    こちらの記事、本当に参考になりました、ありがとうございます。
    記載のコードの微調整だけで確かに色選択コントロールが実装できました。
    1つ伺いたいのですが、その他の色の設定に使ってるWinFormsについてです。
    私の試したWPFプロジェクトではWinFormsは使ってませんでした。
    なのでそのままでは呼び出すことはもちろんできないのでプロジェクトにWinFormsも追加したんです。
    するとWPFとWinForms間の名前被りが多発してしまいました。
    最初はUsingで曖昧な名前を明確に定義しなおしてみたんですけど、あまりに膨大になってしまうのでそれはやめて、とりあえずその他の色については保留することにしました。
    筆者様はこの点、どのように解決されていたのでしょうか。
    もしよろしければご教授いただけると幸いです。
    改めてこのような記事を作成していただき誠に感謝しております。

  • #2

    AraramiStudio (金曜日, 26 1月 2024 18:00)

    wpf初心者ですマンさん
    コメントありがとうございます。
    お役に立てて何よりです。

    名前被りが多発というのはファイル先頭で
    using System.Windows;
    using System.Windows.Forms;
    を両方記述している感じでしょうか?

    WinFormsのコントロールを使う時だけ
    var dialog = new System.Windows.Forms.ColorDialog();
    のように名前空間からフルで記述すれば
    ファイル先頭でusing System.Windows.Forms;を記述する必要はなく
    名前被りのエラーを回避できるかと思います。