2013-09-01 1 views
2

Я хочу получить доступ ко всем элементам, которые находятся внутри сетки, содержащей столбцы и строки.Как получить доступ к элементам внутри строк и столбцов

Я сделал редактирование по найденному методу, но всегда возвращает null.

private static FrameworkElement GetChildren(Grid grid, int row, int column) 
     { 
      FrameworkElement fr = null; 

      foreach (FrameworkElement child in grid.Children) 
      { 
       if ((Grid.GetRow(child) == row) && (Grid.GetColumn(child) == column)) 
       { 

         fr = child; 
       } 
       else 
       { 

         fr = null; 
       } 
      } 

      return fr; 

     } //getchildren 

ответ

1

Ваш подход правильный, но ваш алгоритм неверен.

Предположим, что сетка содержит два элемента. Первый - тот, который вы ищете.

  1. The foreach перечисляет все элементы управления, и возвращает первый. Это правильный ряд и столбец, поэтому вы назначаете его fr.

  2. foreach продолжает и возвращает второй. Это неправильная строка/столбец, поэтому вы назначаете null на номер fr.

  3. Цикл foreach закончил перечисление элементов и возвращает fr, что равно null.

В основном, ваш код будет работать только в том случае, если элемент является последним дочерним элементом сетки.

Чтобы исправить алгоритм, используйте break команду для выхода из цикла, когда вы найдете управления:

FrameworkElement fr = null; 

foreach (FrameworkElement child in grid.Children) 
{ 
    if ((Grid.GetRow(child) == row) && (Grid.GetColumn(child) == column)) 
    { 
      fr = child; 
      break; 
    } 
} 

return fr; 

В качестве альтернативы, вы можете использовать Linq, чтобы сделать код короче:

return grid.Children 
    .OfType<FrameworkElement>() 
    .FirstOrDefault(child => Grid.GetRow(child) == row && Grid.GetColumn(child) == column);