web-dev-qa-db-fra.com

Comment accéder par programme au contrôle dans la grille WPF par ligne et index de colonne?

Une fois que les contrôles ont été ajoutés à une grille WPF, existe-t-il un moyen d'y accéder par programme par index de ligne et/ou de colonne? Quelque chose dans le genre de:

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

... où GetChild est la méthode que j'aimerais avoir!

35
Mathias

Il n'y a pas de méthode intégrée pour cela, mais vous pouvez facilement le faire en consultant la collection Children:

myGrid.Children
      .Cast<UIElement>()
      .First(e => Grid.GetRow(e) == row && Grid.GetColumn(e) == column);
62
itowlson

Cette réponse va vous aider

int rowIndex = Grid.GetRow(myButton);

RowDefinition rowDef = myGrid.RowDefinitions[rowIndex];
8
Carlo

La propriété Children de l'objet grid vous donnera une collection de tous les enfants de la grille (de la classe Panel).

Pour obtenir les coordonnées dans la grille, examinez les méthodes statiques de la classe Grid (GetRow () & GetColumn ()).

J'espère que cela vous oriente dans la bonne direction.

1
Eric Olsson

System :: Windows :: Controls :: Grid ^ myGrid = nullptr; System :: Windows :: Controls :: 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;
    }
}
0
Sabi

vous pouvez simplement donner un nom à votre colonne/rangée de grille

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

et y accéder par programme en l'appelant et en utilisant "."

MainGridBackground.Background = canvasUCInstance.rectanglePreview.Fill;
0
CLU7CH3R