チェックボックスリストボックス
最終更新:
atachi
aaあああ
ListBoxには各項目をレンダリングするテンプレートの設定が行えるItemContainerStyleプロパティにレンダリング用のコントロールを与えればチェックボックスを持つListBoxが実現できます。
XAMLのサンプル
CheckBoxItemStyle.xamlを作成し、そこにItemsContainerStyleを設置したスタイルを定義します。
チェックボックスを持つListBoxの性質として複数の項目が選択可能なものにしたいので、CheckedListBoxStyleスタイルを設定したListBoxには強制的にListBox.SelectionModeに「Multiple」を設定するようにしています。
使用するCheckBoxにはさらにContentTemplateを設定しています。
CheckBox要素の子要素にはContentPresenter要素を使用して本来CheckBox自身が定義しているレンダリングを使用しています。
<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
<Style x:Key="CheckedListBoxStyle" TargetType="{x:Type ListBox}">
<Setter Property="SelectionMode" Value="Multiple" />
<Setter Property="ItemContainerStyle">
<Setter.Value>
<Style TargetType="{x:Type ListBoxItem}">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type ListBoxItem}">
<CheckBox
IsChecked="{Binding RelativeSource={RelativeSource TemplatedParent}, Path=(Selector.IsSelected)}">
<ContentPresenter />
</CheckBox>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
</Setter.Value>
</Setter>
</Style>
</ResourceDictionary>
チェックボックスを持つListBoxを作成するには、上記のリソースディクショナリーファイルを読み込み、ListBoxにスタイルを定義します。
<Window.Resources>
<ResourceDictionary Source="./CheckBoxItemStyle.xaml" />
</Window.Resources>
<ListBox Height="227" HorizontalAlignment="Left" Margin="0" Name="listBox1" VerticalAlignment="Top" Width="243
Style="{StaticResource CheckedListBoxStyle}" />