Как программно получить доступ к Control в WPF Grid по индексу строк и столбцов? - PullRequest
36 голосов
/ 03 октября 2009

Как только элементы управления были добавлены в сетку WPF, есть ли способ программно получить к ним доступ по индексу строки и / или столбца? Что-то вроде:

 var myControl = (object)MyGrid.GetChild(int row, int column);

... где GetChild - метод, который я хотел бы иметь!

Ответы [ 5 ]

66 голосов
/ 03 октября 2009

Для этого нет встроенного метода, но вы можете легко сделать это, посмотрев в коллекцию Children:

myGrid.Children
      .Cast<UIElement>()
      .First(e => Grid.GetRow(e) == row && Grid.GetColumn(e) == column);
8 голосов
/ 03 октября 2009

Этот ответ поможет вам

int rowIndex = Grid.GetRow(myButton);

RowDefinition rowDef = myGrid.RowDefinitions[rowIndex];
1 голос
/ 03 октября 2009

Свойство Children объекта grid даст вам коллекцию всех дочерних элементов Grid (из класса Panel).

Что касается получения координат в сетке, посмотрите на статические методы в классе Grid (GetRow () & GetColumn ()).

Надеюсь, что вы отправитесь в правильном направлении.

0 голосов
/ 09 августа 2018

Вы можете просто дать название столбцу / строке сетки

<Grid x:Name="MainGridBackground" Grid.Column="0"/>

и получить к нему программный доступ, вызвав его и используя "."

MainGridBackground.Background = canvasUCInstance.rectanglePreview.Fill;
0 голосов
/ 13 ноября 2014

Система :: Windows :: Элементы управления :: Сетка ^ myGrid = nullptr; Система :: Windows :: Элементы управления :: UserControl ^ pUserControl = nullptr;

myGrid = m_DlgOwnedObjAdmin->GrdProperties;
if (myGrid->Children->Count > 0)
{
    pUserControl = (System::Windows::Controls::UserControl^)myGrid->Children->default[0];
    if (pUserControl != nullptr)
    {
        if (bValue == true)
            pUserControl->Visibility = System::Windows::Visibility::Visible;
        else
            pUserControl->Visibility = System::Windows::Visibility::Collapsed;
    }
}
...