Jak odwołać się dokontrolki utworzonej kodzie?

Jak odwołać się dokontrolki utworzonej kodzie?
bloniak91
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 93
0

W xml stworzyłem:

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

W kodzie towrzę:

Kopiuj
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.

MI
  • Rejestracja: dni
  • Ostatnio: dni
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>Twoszysz</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"?

bloniak91
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 93
0

Stworzyłem:

Kopiuj
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?

MI
  • Rejestracja: dni
  • Ostatnio: dni
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:

Kopiuj
myGrid.Children
      .Cast<UIElement>()
      .First(e => Grid.GetRow(e) == row && Grid.GetColumn(e) == column); 
dam1an
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Warszawa
  • Postów: 1589
0
misiakufal napisał(a):

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

A co to zmienia?

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.