Гораздо лучшим подходом было бы использование привязки данных ... скажем, например, у вас есть список объектов Person, которые вы хотите отобразить в вашем списке, в codebehind установите список как ItemsSource:
public class Person()
{
public string Name {get; set;}
}
var persons = new List<Person>();
// ... add some person objects here ...
listBox.ItemsSource = persons
В вашем XAML вы можете затем предоставить DataTemplate, который отображает каждого человека в виде кнопки:
<ListBox x:Name="listBox">
<Listox.ItemTemplate>
<DataTemplate>
<Button Content={Binding Path=Name}/>
</DataTemplate>
</Listox.ItemTemplate>
</ListBox>
Это отобразит список кнопок, отображающих имя каждого человека.
Дляукажите изображение для каждой кнопки, чтобы расширить содержание вашей кнопки, добавив изображение:
<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>
Разумеется, вам необходимо добавить свойство ImageSource в ваш объект Person:
public class Person()
{
public string Name {get; set;}
public ImageSource Image {get; set;}
}
Другой альтернативой является использование преобразователя значений для преобразования какого-либо свойства вашей личности в изображение:
Динамическое связывание источника изображения в silverlight
Если вы не хотите использоватьПривязка (которую я лично считаю лучшим подходом), вы можете создать подкласс Button с свойством ImageSource следующим образом:
Созданиеизображение + текстовая кнопка с шаблоном управления?