Как обычно, есть несколько способов ... одна вещь, которую вы можете сделать, в зависимости от ваших потребностей. Вы создаете класс, который содержит вашу информацию, такую как
public class ButtonInfo
{
public string Text{get;set;}
public BitmapSource Image {get;set;}
public ICommand Command{get;set;}
}
сейчас, когда вы создаете свои кнопки
var btn = new Button();
vat info = new ButtonInfo();
info.Text ="Some caption";
// load an image
BitmapImage myBitmapImage = new BitmapImage();
myBitmapImage.BeginInit();
myBitmapImage.UriSource = new Uri(@"C:\Documents and Settings\All Users\Documents\My Pictures\Sample Pictures\Water Lilies.jpg");
myBitmapImage.EndInit();
// set the image
info.Image = myBitmapImage;
// set the button info onto our button
btn.DataContext = info;
Теперь вам нужно немного изменить свой стиль
<Canvas x:Name="list" >
<TextBlock x:Name="Site" Text="{Binding Text}" />
<Image x:Name="Logo" Width="128" Height="104" Source="{Binding Image}" />
</Canvas>
Так что же мы здесь сделали? Мы создали объект, содержащий динамическую информацию для наших кнопок в ButtonInfo
, при создании кнопок мы установили эти отдельные ButtonInfos на кнопки, теперь через привязку данных мы получили данные из ButtonInfo в наши элементы управления.
Я также добавил свойство Command, потому что я думаю, что это будет следующим, что вы можете запутать в апоне. Что можно исправить, добавив
<Setter Property="Command" Value="{Binding Command}"/>
в соответствии с вашим стилем кнопки.
Ну, как я уже сказал, это всего лишь один из способов сделать это, и я не лучший способ. Но этого может быть достаточно.
Кроме того, мне нужно добавить, что я работаю в фоновом режиме WPF, и в Silverlight некоторые вещи могут отличаться, но я думаю, что эти фундаментальные концепции совпадают.
Надеюсь, это поможет.