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

une fois que les commandes ont été ajoutées à une grille WPF, y a-t-il un moyen de Les accéder programmatiquement par ligne et/ou par index de colonne? Quelque chose du genre:

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

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

33
demandé sur Dave Clemmer 2009-10-03 00:49:17

5 réponses

il n'y a pas de méthode intégrée pour cela, mais vous pouvez facilement le faire en regardant dans la collection des enfants:

myGrid.Children
      .Cast<UIElement>()
      .First(e => Grid.GetRow(e) == row && Grid.GetColumn(e) == column);
60
répondu itowlson 2009-10-02 21:12:19

Cette réponse va vous aider

int rowIndex = Grid.GetRow(myButton);

RowDefinition rowDef = myGrid.RowDefinitions[rowIndex];
8
répondu Carlo 2017-05-23 12:26:37

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

en ce qui concerne l'obtention des coordonnées dans la grille, regardez les méthodes statiques dans la classe de grille (GetRow() & GetColumn()).

l'Espérance qui vous met hors tension dans la bonne direction.

1
répondu Eric Olsson 2009-10-02 21:17:38

système:: Windows:: Controls:: Grid^ myGrid = nullptr; Système::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
répondu Sabi 2014-11-13 04:56:16

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

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

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

MainGridBackground.Background = canvasUCInstance.rectanglePreview.Fill;
0
répondu CLU7CH3R 2018-08-08 21:33:09