Jak dodać kontrolki WPF z poziomu własnej klasy

0

Witam,

Chcę aby program czytał wartość int z bazy danych a potem tworzył na podstawie tego ilość checkboxów do MainWindow w projekcie WPF.

Stworzyłem własną klasę:

 class Mapa
    {
        public int wiersze { get; set; }
        public int kolumny { get; set; }
    

        public Mapa()
        {
            for (int i = 0; i < kolumny; i++)
            {
                for (int j = 0; j < wiersze; j++)
                {
                    new CheckBox(); // Co tutaj mam zrobić??
                }

            }
        }
       
    } 

Chodzi mi o to: W jaki sposób z klasy Mapa mogę dodać checkboxy do MainWindow a ilość tych checkboxów zależy od wartości wiersze/kolumny? Szukałem i nie umiem się tego doszukać.

Do Xaml dodałem przestrzeń nazw:
xmlns:local="clr-namespace:Projekt1"

Chcę aby te Checkboxy dodawały się w StackPanelu no więc jakoś kombinowałem i dodałem do StackPanel.Resources:

<StackPanel.Resources>
            <local:Mapa x:Key="mapa1" />
        </StackPanel.Resources> 

No ale niestety niewiem co mam dalej zrobić...

0

Ok już wiem jak dodawać w kodzie kontrolki itd.

      System.Windows.Controls.Button newBtn = new Button();
      newBtn.Content = "A New Button";
      gridname.Children.Add(newBtn);

Problem jest tylko taki, że dostęp do gridname mam tylko i wyłącznie w pliku MainWindows.xaml.cs jak uzyskać dostęp w Mapa.cs ??

0

Znalazłem coś takiego:

((MainWindow)System.Windows.Application.Current.MainWindow).gridname.Children.Add(newBtn);

Czy to jest prawidłowy zapis?

No i gdy wrzucę to do tej pętli:

     public mapa(int Wiersze, int Kolumny)
        {
            this.wiersze = Wiersze;
            this.kolumny = Kolumny;

            for (int i = 0; i < kolumny; i++)
            {
                for (int j = 0; j < wiersze; j++)
                {
                    CheckBox newcheckbox = new CheckBox();
                    ((MainWindow)System.Windows.Application.Current.MainWindow).gridname.Children.Add(newcheckbox);
                }

            } 

To dodaje się tylko jeden checkbox

0

A co to jest gridname? Podejrzewam że jakiś Grid, jeśli dodasz kilka kontrolek do grida nie określając żadnych marginesów czy kolumn lub rzędów to wszystkie dodadzą ci się w tym samym miejscu.
Chciałeś to dodawać do StackPanelu przecież. Wiec w Xamlu musisz mieć

<StackPanel Name="MyStackPanel" />

I możesz później.

 public mapa(int Wiersze, int Kolumny)
        {
            this.wiersze = Wiersze;
            this.kolumny = Kolumny;
 
            for (int i = 0; i < kolumny; i++)
            {
                for (int j = 0; j < wiersze; j++)
                {
                    CheckBox newcheckbox = new CheckBox();
                    ((MainWindow)System.Windows.Application.Current.MainWindow).MyStackPanel.Children.Add(newcheckbox);
                }
 
            } 

Ale to jest w ogóle głupi pomysł. Powinieneś tu użyć DataGrida, ListBoxa lub ListView.

1 użytkowników online, w tym zalogowanych: 0, gości: 1