2009-10-02 25 views

Répondre

57

Il n'y a pas une méthode intégrée pour cela, mais vous pouvez facilement le faire en regardant dans la collection Enfants:

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

Bien que - Cela peut valoir la peine de renvoyer la collection complète, puisque techniquement, vous pouvez avoir plus d'un élément dans une seule "cellule" de la grille, puisque les propriétés attachées ne vérifient pas cela. –

+0

Merci. C'est l'approche que j'ai suivie jusqu'ici, en répétant chaque enfant dans Children jusqu'à ce que je trouve un contrôle avec une rangée et une colonne correspondantes, mais je m'attendais à ce qu'il y ait quelque chose de plus direct. – Mathias

+2

Merci, Reed, bon point - cela peut facilement être accompli en utilisant Where au lieu de First. – itowlson

8

This answer vous aidera à

int rowIndex = Grid.GetRow(myButton); 

RowDefinition rowDef = myGrid.RowDefinitions[rowIndex]; 
+0

Merci, mais cela ne fonctionne pas car je n'ai pas de référence à myButton! – Mathias

+0

Oh je comprends. – Carlo

+0

C'est exactement ce que je cherchais. J'avais une référence à l'objet, j'avais juste besoin de savoir quelle rangée et quel col il y avait dedans. Merci, Carlo. – esteuart

0

La propriété Enfants de l'objet grille 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 Grid (GetRow() & GetColumn()).

L'espoir qui vous met dans la bonne direction.

0

System :: Windows :: Contrôles :: 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; 
    } 
} 
Questions connexes