Jak odwołać się dokontrolki utworzonej kodzie?

0

W xml stworzyłem:

<Grid Name="siatka">
        
    </Grid>

W kodzie towrzę:

public MainWindow()
        {
            InitializeComponent();
            siatka.Height = 192;
            siatka.Width = 792;
            siatka.ShowGridLines = true;
            
            for (int i = 0; i < 100; i++)
            {
                siatka.ColumnDefinitions.Add(new ColumnDefinition());
            }
            for (int i = 0; i < 30; i++)
            {
                siatka.RowDefinitions.Add(new RowDefinition());
            }
            for (int i = 0; i < 100; i++)
            {
                for (int ii = 0; ii < 30; ii++)
                {
                    var d = new Label();
                    d.Name = "D" + i + ii;
                    Grid.SetRow(d, ii);
                    Grid.SetColumn(d, i);
                    siatka.Children.Add(d);
                }
            }
}

i Chciałbym odwołać się do konkretnego labela, który np mieści się w 0,0, w jakiejś metodzie. Jak to zrobić? Po name mi nie wyszukuje.

0

Najpierw nie Twórz tego Labela jako var, tylko jako Label. Secundo - Tworzysz tego labela, dodajesz go do siatki i o nim zapominasz tj tracisz do niego referencję. Masz 2 możliwości.
Albo ort! sobie w klasie 2wymiarową tablicę Label labels[100, 30] i do komórek tej tablicy przypisujesz wygenerowane Labele. Potem zeby dobrać się do nich, <ort>po prostu</ort> pobierasz labela z danej pozycji np labels[0, 0].
Druga opcja, to wyciagnięcie kontrolki z samego Grida. Tracisz referencje do Labela, ale wcześniej przypisujesz go do Grida i w gridzie ta referencja siedzi. Musisz teraz tylko z grida ją wyciagnąć. Czy szukałeś może w google frazy "get control from grid wpf"?

0

Stworzyłem:

public Label [,]tablica { get; set; }
 tablica = new Label[100, 30];
            for (int i = 0; i < 100; i++)
            {
                for (int ii = 0; ii < 30; ii++)
                {

                    var d = new Label();
                    d.Name = "D" + i + ii;
                    d.Background = Brushes.Red;
                    Grid.SetRow(d, ii);
                    Grid.SetColumn(d, i);
                    siatka.Children.Add(d);
                    tablica[i, ii] = d;
                }
            }

i po odwołaniu się po elemencie tablicy działa wszytsko ok:)

misiakufal napisał(a):

Czy szukałeś może w google frazy "get control from grid wpf"?

Szukałem, ale nie znalazłemnic ciekawego. Jest do tego jakaś gotowa metoda?

0

A ja znalazłem. Pierwszy link na liscie wyników: http://stackoverflow.com/questions/1511722/how-to-programmatically-access-control-in-wpf-grid-by-row-and-column-index

A tam pierwsza odpowiedź to jest właśnie to:

myGrid.Children
      .Cast<UIElement>()
      .First(e => Grid.GetRow(e) == row && Grid.GetColumn(e) == column); 
0
misiakufal napisał(a):

Najpierw nie Twórz tego Labela jako var, tylko jako Label.

A co to zmienia?

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