J'ai une Datagrid remplie d'une table. Maintenant, la barre de défilement verticale apparaît parce que la table ne correspond pas. C'est bien pour le moment. Maintenant, dans la dernière colonne, j'ai défini un bouton dans le fichier xaml. Tous ces boutons ont le même rappel, mais je peux distinguer de l'index selectedIndex de la table ce que ce callback devrait faire. Parce que cliquer sur le bouton sélectionne aussi automatiquement la ligne dans le DataGrid où ce bouton vit. C'est bien pour le moment. Maintenant, dans mon application, pour certaines lignes, je veux désactiver le bouton, car il n'a aucune signification pour cette ligne spécifique. Donc, ce que j'ai fait est de prendre un abonnement sur l'événement Load de chaque bouton et laisser le callback définir le MaxWidth = 0, si le bouton n'a aucune signification. Cela fonctionne bien aussi, mais seulement initialement. Dès que je commence à faire glisser la barre de défilement, des endroits au hasard apparaissent dans les boutons de la colonne Bouton, ou mauvais boutons obtiennent MaxWidth = 0. J'ai le fort sentiment que les cellules qui défilent en haut sont réutilisées en bas, mais je ne recevez pas d'événement, ou du moins je ne sais pas sur quel événement je devrais m'abonner. Je ne sais pas comment identifier la barre de défilement. Quelqu'un at-il une suggestion pour s'attaquer à ce problème?SilverGate DataGrid avec un problème de barre de défilement verticale
2
A
Répondre
0
J'ai finalement trouvé une solution à ce problème moi-même, et je l'afficherai pour mémoire. L'événement auquel vous devez vous abonner est (généré par DataGrid). Dans le rappel
void TableLoadingRow(object sender, DataGridRowEventArgs e)
vous pouvez identifier un élément dans une cellule en utilisant VisualTreeHelper par exemple comme suit:
private void ButtonSetMaxWidth(DependencyObject reference, int maxWidth)
{
if (reference != null)
{
for (int i = 0; i < VisualTreeHelper.GetChildrenCount(reference); i++)
{
var child = VisualTreeHelper.GetChild(reference, i);
if (child.GetType() == typeof(Button))
{
Button b = (Button)child;
if (b.Name == "TheNameOfTheButtonInTheXAML")
{
b.MaxWidth = maxWidth;
return;
}
}
ButtonSetMaxWidth(child, maxWidth);
}
}
return;
}