Jak dynamicznie tworzyć kontrolki?

0

Witam,
Piszę do was z pytaniem jak dynamicznie dodać do Grida jakąś liczbę 'labeli' podaną wcześniej przez użytkownika aplikacji?

Mam następujący kod, żeby wam naświetlić obraz sytuacji:

        private void btn_Dalej_Click(object sender, RoutedEventArgs e)
        {
            if (podstrona == 1)
            {
                int.TryParse(txt_LiczbaPartii.Text, out liczba_partii);
                int.TryParse(txt_LiczbaMandatow.Text, out liczba_mandatow);

                if (liczba_partii > 0 && liczba_mandatow > 0)
                {
                    DodajPartie dodaj_partie = new DodajPartie(liczba_partii, liczba_mandatow);
                    ListaPartii.Add(dodaj_partie);

                    podstrona += 1;

                    grd_Podstrona_Pierwsza.Visibility = System.Windows.Visibility.Hidden;
                }
                else
                {
                    MessageBox.Show("Najpierw wprowadź dane!", "Informacja", MessageBoxButton.OK, MessageBoxImage.Information);
                }
            }

            if (podstrona == 2)
            {
                grd_Podstrona_Druga.Visibility = System.Windows.Visibility.Visible;


                foreach (DodajPartie dodaj_partie in ListaPartii)
                {
                    if (aktualna_partia <= dodaj_partie.liczba_partii - 1)
                    {
                        nazwa_partii = txt_Nazwa.Text;
                        int.TryParse(txt_Glosy.Text, out ilosc_glosow);

                        lbl_Numer_Partii.Content = (aktualna_partia + 1).ToString();

                        if (nazwa_partii != "" && ilosc_glosow != 0)
                        {
                            dodaj_partie.Nazwa_Partii[aktualna_partia] = nazwa_partii;
                            dodaj_partie.Ilosc_Glosow[aktualna_partia] = ilosc_glosow;
                            aktualna_partia++;
                        }
                    }
                    else
                    {
                        podstrona++;
                        grd_Podstrona_Druga.Visibility = System.Windows.Visibility.Hidden;
                    }
                }
            }

            if (podstrona == 3)
            {
                foreach (DodajPartie wszystkie in ListaPartii)
                {
                    grd_Podstrona_Trzecia.Visibility = System.Windows.Visibility.Visible;

                    Label[] lblLista = new Label[wszystkie.liczba_partii];

                    for (int i = 0; i < wszystkie.liczba_partii; i++)
                    {
                        // ???????????
                    }
                }

            }
        }
0

Czemu to musi być koniecznie do grida? Nie lepiej to dodać do na przykład listview?
Można to zrobić z gridem ale się trzeba z rzędami i kolumnami pierdzielić.

0

Może być i ListView, po prostu w Gridzie zacząłem sobie Podstrony robić, by cała aplikacja była jednookienkowa.

1

Zrób tablicę Labeli uzupełnij wartości takie jak nazwa, rozmiar, pozycja i następnie

grid.Children.Add(label[x]); //jakaś pętla i masz ;)

To powinno rozwiać wszystkie wątpliwości.

1

Zrób to jak bozia przykazała, czyli kolekcja ObservableCollection i bindujesz do listview czy czego tam chcesz.
Tu masz przykład http://www.wpf-tutorial.com/listview-control/listview-data-binding-item-template/ tylko zamiast List<User> lepiej użyć ObservableCollection<User> wtedy nawet jak gdzieś później coś dodasz lub usuniesz to widok się zaktualizuje.

foreach (DodajPartie wszystkie in ListaPartii)

Strasznie źle to nazywasz. Nie wiadomo co to jest.
DodajPartie - to powinna być nazwa metody
ListaPartii - to nazwa kolekcji
czyli coś w stylu:

List<Partia> ListaPartii = new List<Parta>();// albo lepiej po prostu Partie

foreach(Partia partia in ListaPartii)
0

Wiem, wiem. Miałem wyedytować zanim napisałem, po prostu o 3 w nocy wczoraj to robiłem i całkiem z głowy mi wyleciało ;)

0

Działa, zrobiłem to w ten sposób:

 
               foreach (DodajPartie Partie in ListaPartii)
                {
                    grd_Podstrona_Trzecia.Visibility = System.Windows.Visibility.Visible;

                    Label[] lblTablica = new Label[Partie.liczba_partii];
                    

                    for (int i = 0; i < Partie.liczba_partii; i++)
                    {
                        lblTablica[i] = new Label();
                        {
                            lblTablica[i].Name = ("label" + i);
                            lblTablica[i].Content = Partie.Nazwa_Partii[i];
                            lblTablica[i].Tag = i;
                            lblTablica[i].Margin = new Thickness(5, loc, 0, 0);
                        }

                        grd_Podstrona_Trzecia.Children.Add(lblTablica[i]);
                        loc += 20;
                    }
                }

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