Мои два цента:
Если вы хотите, чтобы все кнопки, которые вы создаете в цикле, работали по-разному, подумайте о том, что отличается от самих кнопок, и проверьте это.Например:
- Если каждая кнопка генерируется из отдельного элемента данных, задайте его DataContext и используйте его для поиска исходного элемента данных.
- Если каждая кнопка пронумерована, установитеDataContext для номера кнопки.
- Если каждая кнопка имеет различное значение, установите Click для разных обработчиков событий.Вы можете создать массив из них.Или прикрепите к каждой кнопке отдельный объект в качестве CommandParameter.
Ваш код будет наиболее значимым, если вы будете различать свое поведение на основе того, что заметно для конечного пользователя.
Пример:
for(int i=0; 0<10; i++)
{
var btn = new Button
{
DataContext = i,
Height = 200, Width = 200,
Margin=new Thickness(0, 100, 0 0),
});
btn.Click += (sender, e) =>
{
MessageBox.Show("You clicked button " + ((Button)sender).DataContext);
};
dockPanel.Children.Add(btn); // Or you could use Canvas & Canvas.SetLeft
}
Я бы настоятельно рекомендовал вам использовать DockPanel вместо Canvas для этого.Если конечному пользователю не нужно произвольное позиционирование (перетаскивание), Canvas почти никогда не подходит для использования.Если вы используете DockPanel, вам не нужно устанавливать левую координату - он автоматически сделает это за вас.