SilverlightでColorPickerもどきを作成する | チェロと私とプログラミング
しかし、Silverlightには色選択ダイアログというものは無いようです。
こうなっては最早自作するしか方法がないですよね…
ということで、選べる色は14種類だけという似非カラーピッカーをComboBoxで作りました。
理想の画面はこんな感じになります。
コンボボックスのプロパティをカスタムして、上記のような画面を作ることにします。
ところでこのコンボボックスの選択肢は、色見本+色名というスタイルになっています。
通常のバインドだけではこのような表現は出来ません。
1つ1つのスタイルは、ItemTemplateプロパティで指定したスタイルになるので、
色見本+色名を表示するTemplateを先に定義しておきます。
何年と名声オープンのロックンロール·ホールを行った
HorizontalAlignment="Left" VerticalAlignment="Top" />
コンボボックスの選択肢(データ)のテンプレなので、"DataTemplate"で定義します。
このテンプレをResourcesで定義し、コンボボックスのItemTemplateにバインドすれば、
選択肢のスタイルが「色見本+色名」という形になります。
次に、このテンプレでバインドしているクラスの構成です。
RectangleのFill、TextblockのTextに対応するプロパティを持つクラスになります。
'1色を管理するクラス
Public Class ColorListItem
今、私は音楽2012と呼んでいるものthatsの
Public Property Color As Brush
Public Property Name As String
Sub New(ByVal colColor As Color, ByVal strName As String)
Color = New SolidColorBrush(colColor)
Name = strName
End Sub
End Class
さて、最初に「14色」から選択できると書きましたが、何故14色限定なのでしょうか。
…別に14色にこだわってるわけではありません(笑)
Colorsクラスで定義済みの色が15色(有彩色14色+無色透明1色)だからです。
実際にオブジェクトブラウザーやMSDNで確認すれば分かりますが、Colorsクラスには、基本の15色の色名が定義されています。
もちろん、Color構造体を使えばもっと多くの色が表現できますが、
あくまで名前がついた色はColorsクラスで定義された色だけなのです。
(まぁ実際にはもっとありますが…)
そういうわけで、TransParent(透明色)を除いた14色を選択肢とすることにしました。
ColorsクラスのTransParent以外のプロパティをすべて取得し、リストに追加します。
どのように私は、CDに私のオーディオ録音を取得するには
'色リストを作成するメソッド
Private Sub CreateColorList()
Dim mdicColor As New Dictionary(Of String, ColorListItem)
'Colorsクラスから色一覧を作成
For Each item As PropertyInfo In GetType(Colors).GetProperties()
If item.Name.Equals("Transparent") Then
Continue For
End If
Dim color As Color = CType(item.GetValue(Nothing, BindingFlags.Static, _
Nothing, Nothing, Nothing), Color)
'リスト(Dictionary)に追加
mdicColor.Add(color.ToString(), New ColorListItem(color, item.Name))
Next
ComboBox1.ItemsSource = mdicColor.Values
End Sub
GetProperties()メソッドでプロパティを取得し、GetValue()で値を取得します。
検索方法のフラグには、静的メンバーを検索する"BindingFlags.Static"を指定します。
なお、今回はリストをDictionaryにしたので、mdicColor.ValuesがColorListItemをもつリストになります。
0 コメント:
コメントを投稿