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!
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);
Cette réponse va vous aider
int rowIndex = Grid.GetRow(myButton);
RowDefinition rowDef = myGrid.RowDefinitions[rowIndex];
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.
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;
}
}
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;