より良いアプローチは、分離コードでのItemsSourceとしてリストを設定し、あなたがあなたのリストボックスに表示するPersonオブジェクトのリストを持って、たとえば言う...データバインディングを使用することです:
public class Person()
{
public string Name {get; set;}
}
var persons = new List<Person>();
// ... add some person objects here ...
listBox.ItemsSource = persons
<ListBox x:Name="listBox">
<Listox.ItemTemplate>
<DataTemplate>
<Button Content={Binding Path=Name}/>
</DataTemplate>
</Listox.ItemTemplate>
</ListBox>
これは、一人一人の名前を表示するボタンのリストがレンダリングされます:あなたは
は、あなたがボタンとして一人一人をレンダリングするDataTemplateを供給することができXAML。画像が含まれるように、ボタンの内容を拡張し、各ボタンの画像を指定するには
:
<ListBox x:Name="listBox">
<Listox.ItemTemplate>
<DataTemplate>
<Button>
<StackPanel Orientation="Horizontal">
<TextBlock Text="{Binding Path=Name}"/>
<ImageText Source="{Binding Path=Image}"/>
</StackPanel>
</Button>
</DataTemplate>
</Listox.ItemTemplate>
</ListBox>
あなたはもちろん、あなたのPersonオブジェクトにImageSourceはプロパティを追加する必要があります:
public class Person()
{
public string Name {get; set;}
public ImageSource Image {get; set;}
}
もう1つの方法は、値コンバータを使用してPersonの一部のプロパティをイメージに変換することです。
Dynamic image source binding in silverlight
あなたは以下のとおりImageSourceはプロパティを持つボタンのサブクラスを作成することができます(私は個人的に最善の方法だと思うもの)バインディングを使用したくない場合は、次の
Creating an image+text button with a control template?