как добавить элемент управления в указанную строку и столбец в сетке оконного элемента управления?

как добавить элемент управления в указанную строку и столбец в сетке оконного элемента управления (а не в gridview или datagrid)? в C #

Предположим, мы знаем, в какой строке и столбце расположен элемент управления, как получить управление по строке и столбцу сетки?

Спасибо


person user302933    schedule 29.04.2010    source источник


Ответы (1)


Что ж, вы можете легко сделать это с помощью запроса LINQ:

public IEnumerable<UIElement> GetElementsAtPosition(Grid grid, int row, int column)
{
    return grid.Children.OfType<UIElement>().Where(c => Grid.GetRow(c) == row && Grid.GetColumn(c) == column);
}

Это должно вернуть IEnumerable, так как на данном пересечении строки и столбца может быть несколько элементов управления. Это также не очень надежно, если вы выполняете охват строк / столбцов (он не улавливает случай, когда элемент начинается с другой строки или столбца и переходит в него).

ИЗМЕНИТЬ Спасибо @wpfwannabe за правильного оператора LINQ, необходимого для этой работы. Я до сих пор не понимаю, что UIElementCollection не реализует IEnumerable ‹UIElement›.

person Abe Heidebrecht    schedule 29.04.2010
comment
Спасибо. Должен ли я добавить using namespace System.Linq или ...? - person user302933; 30.04.2010
comment
У меня есть System.Linq, но проблема с grid.Children.Children.Куда мне не хватает, пожалуйста? Спасибо - person user302933; 30.04.2010
comment
System.Windows.Controls.UIElementCollection 'не содержит определения для' Where 'и никакого метода расширения' Where ', принимающего первый аргумент типа' System.Windows.Controls.UIElementCollection ' - person user302933; 30.04.2010
comment
Попробуйте grid.Children.OfType<UIElement>.Where(c => Grid.GetRow(c) == row && Grid.GetColumn(c) == column). - person wpfwannabe; 30.04.2010
comment
К сожалению, я всегда забываю, что коллекция не реализует IEnumerable ‹UIElement› Спасибо @wpfwannabe за решение. - person Abe Heidebrecht; 03.05.2010