マークアップと分離コード

マークアップでは、色の名前を表示するリスト項目 ListBox のほかに、その色を表示するキャンバス Canvas を用意します。


<!-- exBrushes.xaml -->

<ListBox Name="listBox" DockPanel.Dock="Left" />
<Canvas Name="colorBox" />

マークアップで記述した各コントロール ListBox/Canvas を、分離コードで参照するときには(プロパティー Name= に続く文字列と同じ名前の)インスタンス属性 listBox/colorBox を利用できます。


# exBrushes.py
class ExWindow(Window):
def init(self):
target = "listBox", "colorBox"
self.initControls(target)
for e in self.colorBrushes():
self.listBox.Items.Add(e)
self.listBox.SelectionChanged += self.selectionChanged

メソッド colorBrushes から得られるリストの各要素 e には、色の名前が含まれます。そこで、各要素 e を、プロパティー Items に追加 Add すると、リスト項目には色の名前が表示されます。


def colorBrushes(self):
return [e for e in dir(Brushes)
if isinstance(getattr(Brushes, e), SolidColorBrush)]

クラス Brushes で規定された色の名前を要素とする、リストを生成します。Brushes の属性リストの中から(組み込み関数 isinstance/getattr を使って)SolidColorBrush のインスタンスだけを選びます。

《参照》組み込み関数 isinstance/getattr の詳細は、付録を参照してください。□


def selectionChanged(self, sender, e):
s = sender.SelectedItem
self.colorBox.Background = getattr(Brushes, s)

選択したリスト項目の色をキャンバスに表示します。組み込み関数 getattr を使って、選択した項目 s の色が得られるので、その色でキャンバスの背景を描きます。たとえば、項目 AliceBlue を選ぶと、背景色が Brushes.AliceBlue になります。