Это 100% неправильный подход к этому.
Вы должны никогда динамически создавать подобные элементы управления пользовательским интерфейсом.Это так неправильно, что не стоит выяснять, что не так в вашем коде.
Используйте MVVM, это сделает вашу жизнь намного, намного, намного проще.Ваши номера лотереи - данные , шары, визуальное представление этих данных.Итак, в вашей виртуальной машине:
public ObservableCollection<int> Draws {get;} = new ObservableCollection<int>();
// Invoked from command, or could be a click handler until you learn commands
public AddDraw()
{
int draw = GetNextDraw(); //Left as an exercise
Draws.Add(draw)
}
Теперь, когда данные обработаны, нам нужно их отобразить.ItemsControl
- это способ отображения коллекций, используйте ItemTemplate
для управления отображением числа (шарик) и ItemsPanel
для управления макетом (возможно, вам нужен горизонтальный WrapPanel
):
<ItemsControl ItemsSource="{Binding Draws}">
<ItemsControl.ItemTemplate>
<DataTemplate>
<Grid>
<Ellipse Fill="Red/>
<TextBlock Text="{Binding Path=.}" VerticalAlignment="Center" HorizontalAlignment="Center"/>
</Grid>
</DataTemplate>
</ItemsControl.ItemTemplate>
<ItemsControl.ItemsPanel>
<ItemPanelTemplate>
<WrapPanel Orientation="Horizontal"/>
</ItemPanelTemplate>
</ItemsControl.ItemsPanel>
</ItemsControl>
Это не в моей голове, поэтому у меня может быть неправильное свойство или класс.Intellisense должен исправить это довольно быстро.
После настройки вы можете добавить поле, изменить цвета, что угодно.Этот дизайн - то, для чего был создан WPF, воспользуйтесь им.
Отказ от ответственности: мне приходилось иметь дело с созданием элементов управления пользовательским интерфейсом на всех ОДИН РАЗ.За 7 лет профессиональной работы в WPF и только потому, что представляемая структура данных была невероятно сложной (и не похожей на то, как она была представлена).