15. 選択項目が変更されたことを知る
選択項目が変更されたことを知るには、SelectionChangedイベントを使用します。
下記は、選択されている項目が変更されると、新たに選択された項目をメッセージボックスに表示する例です。

Private Sub ListBox1_SelectionChanged(ByVal sender As System.Object, ByVal e As System.Windows.Controls.SelectionChangedEventArgs) Handles ListBox1.SelectionChanged
'選択項目を取得
Dim selectedItem As ListBoxItem = ListBox1.Items(ListBox1.SelectedIndex)
MessageBox.Show(selectedItem.Content.ToString() & "が選択されました")
End Sub
private void listBox1_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
// 選択項目を取得
ListBoxItem selectedItem = (ListBoxItem)listBox1.Items[listBox1.SelectedIndex];
MessageBox.Show(selectedItem.Content.ToString() + "が選択されました");
}
選択項目が変更されたことを知るにはSelectionChangedイベントを使用する
16. CheckedListBoxコントロールを作成する
ChekcedListBoxコントロールとは、ListBoxに表示される項目がCheckBoxの機能を持つコントロールです。ChekedListBoxコントロールは従来のWindowsアプリケーションには提供されているのですが、WPFやSilverlightでは提供されていません。そこで、CheckedListBoxコントロールを作成する例を紹介します。

下記に示したXAMLを見ながら説明を読んでください。
CheckedListBoxの項目をCheckBoxコントロールにするために、ListBoxItemのスタイルを定義します。スタイルの定義はStyle要素の中で行っています。
ControlTemplateのTargetType属性でListBoxItemを指定して、項目がCheckBoxコントロールとなるように設定しています。このときCheckBoxコントロールが持つIsChekedプロパティをListBoxItemのIsSelectedプロパティと結びつけています。
Bindingモードを使用し、CheckBoxがチェックされると、内部的には項目を選択した状態(IsSelectedをTrue)にされるようにしています。また項目を選択状態にすると、反対にCheckBoxがチェックされる(IsCheckedがTrue)ようになります。CheckBox要素内にあるContentPresenter要素は、実際の項目を表しています。
以上で、CheckedListBoxコントロールのスタイルの作成は終わりです。
実際に使用するには、ListBoxコントロールのItemContainer属性に作成したスタイルを設定し、SelectionMode属性をMultipleまたはExtendedに設定します。SelectionMode属性にSingleを設定すると、1つの項目にしかチェックを付けることができないので注意してください。
<Window.Resources>
<SolidColorBrush x:Key="ListBorder" Color="#828790"/>
<Style x:Key="ListBoxItemStyle1" TargetType="{x:Type ListBoxItem}">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type ListBoxItem}">
<!-- IsSelected プロパティを IsChecked プロパティに関連づけ -->
<CheckBox IsChecked="{Binding Path=IsSelected, Mode=TwoWay, RelativeSource={RelativeSource TemplatedParent}}" Margin="2">
<ContentPresenter />
</CheckBox>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
</Window.Resources>
<Grid>
<ListBox Height="144" HorizontalAlignment="Left" Name="ListBox1" VerticalAlignment="Top" Width="136"
SelectionMode="Multiple" ItemContainerStyle="{StaticResource ListBoxItemStyle1}" Margin="12,12,0,0">
<ListBoxItem>リンゴ</ListBoxItem>
<ListBoxItem>ミカン</ListBoxItem>
<ListBoxItem IsSelected="True">バナナ</ListBoxItem>
<ListBoxItem>パイナップル</ListBoxItem>
<ListBoxItem>スイカ</ListBoxItem>
<ListBoxItem>グレープフルーツ</ListBoxItem>
</ListBox>
</Grid>
CheckedListBoxコントロールを作成するには、ControlTemplateを使用してListBoxItemをカスタマイズする。
項目がチェックボックスになるようCheckBoxに置き換え、IsCheckedプロパティをListBoxItemのIsSelectedプロパティにバインディングする。
まとめ
今回は、ListBoxコントロールについて取り上げました。
ListBoxコントロールには多くのプロパティ、イベント、メソッドが備わっており、それ単体でも非常に強力なコントロールです。さらに本記事で紹介したように、カスタマイズすることでさらに強力なコントロールとしてアプリケーションに花を添えてくれることでしょう。
最後に、ListBoxコントロールのMSDNリンクを下記に記しておきます。
