Есть несколько способов сделать это в WPF. Быстрый и грязный подход состоит в том, чтобы сделать что-то вроде этого:
<StackPanel x:Name="CheckBoxes" />
Затем в вашем коде выполните:
for (int i=0; i < 10; i++) {
this.CheckBoxes.Children.Add(new CheckBox());
}
Но, на первый взгляд, это выглядит просто, но в долгосрочной перспективе от этого трудно работать. Вместо этого лучшим решением было бы иметь класс с логическим свойством, таким как:
// this should really implement INotifyPropertyChanged but
// we'll ignore that for now...
public class SelectableThing {
public bool IsSelected {
get;
set;
}
public string Description {
get;
set;
}
}
Тогда в вашем XAML у вас будет привязываемый элемент управления, например ItemsControl:
<ItemsControl x:Name="CheckBoxes">
<ItemsControl.ItemTemplate>
<DataTemplate>
<CheckBox IsChecked="{Binding IsSelected, Mode=TwoWay}"
Content="{Binding Description}" />
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
Затем в своем коде вы можете создать коллекцию этих SelectableThing и установить их в качестве ItemsSource.
private SelectableThing[] things;
// where you do this is up to you really
private void Window_Load(object sender, RoutedEventArgs e) {
things = new SelectableThing[] {
new SelectableThing("First Thing"),
new SelectableThing("Second Thing"),
new SelectableThing("Third Thing")
};
CheckBoxes.ItemsSource = things;
}