ListBox コントロールでは、1つの項目に複数のコンテントを含めることができます。例えば、1つの項目を画像とテキストで構成することが可能です。
しかし、項目を表す ListBoxItem 要素は、1つコンテントしか格納することができないので、StackPanel等のコンテナとなり得るコントロールを1つ配置し、その中に複数のコントロールを置きます。
下記は、1つの項目に複数のコンテントを含める例です。
左側の ListBox は「国旗の画像」と「国名」で1つの項目としています。右側の ListBox は「テキスト」と「複数のCheckBoxコントロール」で1つの項目としています。
XAMLの例
<ListBox>
<ListBoxItem>
<StackPanel Orientation="Horizontal">
<Image Height="20" Name="Japan" Source="./Images/japan.gif" Width="32" />
<TextBlock>日本</TextBlock>
</StackPanel>
</ListBoxItem>
<ListBoxItem>
<StackPanel Orientation="Horizontal">
<Image Height="20" Name="USA" Source="./Images/usa.gif" Width="32" />
<TextBlock>アメリカ</TextBlock>
</StackPanel>
</ListBoxItem>
<ListBoxItem>
<StackPanel Orientation="Horizontal">
<Image Height="20" Name="Canada" Source="./Images/canada.gif" Width="32" />
<TextBlock>カナダ</TextBlock>
</StackPanel>
</ListBoxItem>
<ListBoxItem>
<StackPanel Orientation="Horizontal">
<Image Height="20" Name="Korea" Source="./Images/korea.gif" Width="32" />
<TextBlock>韓国</TextBlock>
</StackPanel>
</ListBoxItem>
<ListBoxItem>
<StackPanel Orientation="Horizontal">
<Image Height="20" Name="Taiwan" Source="./Images/taiwan.gif" Width="32" />
<TextBlock>台湾</TextBlock>
</StackPanel>
</ListBoxItem>
</ListBox>
<ListBox>
<ListBoxItem>
<StackPanel Orientation="Horizontal">
<TextBlock VerticalAlignment="Center" Width="60">フルーツ</TextBlock>
<StackPanel>
<CheckBox Name="Apple">リンゴ</CheckBox>
<CheckBox Name="Orange">バナナ</CheckBox>
<CheckBox Name="Banana">ミカン</CheckBox>
</StackPanel>
</StackPanel>
</ListBoxItem>
<ListBoxItem>
<StackPanel Orientation="Horizontal">
<TextBlock VerticalAlignment="Center" Width="60">野菜</TextBlock>
<StackPanel>
<CheckBox Name="Cucumber">キュウリ</CheckBox>
<CheckBox Name="Onion">タマネギ</CheckBox>
<CheckBox Name="Tomato">トマト</CheckBox>
</StackPanel>
</StackPanel>
</ListBoxItem>
</ListBox>
VBの例
Dim stp As New StackPanel 'StackPanel
Dim bi As New BitmapImage 'BitmapImage
Dim jpnImage As New Image 'Image
Dim tbName As New TextBlock 'TextBlock
'StackPanelの設定(水平方向)
stp.Orientation = Orientation.Horizontal
'Imageの設定
bi.BeginInit() ' ← Silverlight ではコメントにすること
bi.UriSource = New Uri("Images/Japan.gif", UriKind.Relative)
bi.EndInit() ' ← Silverlight ではコメントにすること
jpnImage.Source = bi
jpnImage.Height = 20
jpnImage.Width = 32
'TextBlockの設定
tbName.Text = "日本"
'StackPanelにImageとTextBlockを追加
stp.Children.Add(jpnImage)
stp.Children.Add(tbName)
'作成したアイテムをListBox1コントロールに追加
ListBox1.Items.Add(stp)
C#の例
StackPanel stp = new StackPanel(); // StackPanel
BitmapImage bi = new BitmapImage(); // BitmapImage
Image jpnImage = new Image(); // Image
TextBlock tbName = new TextBlock(); // TectBlock
// StackPanelの設定(水平方向)
stp.Orientation = Orientation.Horizontal;
// Imageの設定
bi.BeginInit(); // ← Silverlight ではコメントにすること
bi.UriSource = new Uri("../Images/Japan.png", UriKind.Relative);
bi.EndInit(); // ← Silverlight ではコメントにすること
jpnImage.Source = bi;
jpnImage.Height = 20;
jpnImage.Width = 32;
// TextBlockの設定
tbName.Text = "日本";
// StackPanelにImageとTextBlockを追加
stp.Children.Add(jpnImage);
stp.Children.Add(tbName);
// 作成したアイテムをListBox1コントロールに追加
listBox1.Items.Add(stp);
