Question

J'utilise la méthode LogicalTreeHelper.GetParent() récursive pour trouver les éléments racine de divers autres éléments WPF. Cela fonctionne très bien avec presque tout, mais il échoue pour la DataGridColumn tels que DataGridTextColumn. J'ai découvert que DataGridColumn ne fait pas partie de l'arbre logique, ni l'arborescence visuelle. Puis-je trouver en quelque sorte le DataGrid il appartient (et obtenir la racine de la grille)?

La lecture de la documentation MSDN je ne pouvais pas trouver une solution appropriée. Merci.

Mon code pour trouver la racine logique:

private DependencyObject FindLogicalRoot(DependencyObject obj)
{
  if (obj == null)
     return null;
   else
   {
       var parent = LogicalTreeHelper.GetParent(obj);
       return parent != null ? FindLogicalRoot(parent) : obj;
   }
 }
Était-ce utile?

La solution

DataGridColumn a cette propriété, mais il est privé de sorte que vous devrez utiliser la réflexion pour l'obtenir. Ou bien faire quelques recherches dans la VisualTree et comparer les colonnes pour chaque DataGrid à la colonne que vous voulez trouver

public DataGrid GetDataGridParent(DataGridColumn column)
{
    PropertyInfo propertyInfo = column.GetType().GetProperty("DataGridOwner", BindingFlags.Instance | BindingFlags.NonPublic);
    return propertyInfo.GetValue(column, null) as DataGrid;
}

Autres conseils

var grid = ((Telerik.Windows.Controls.GridView.GridViewCellBase)
           ((sender as FrameworkElement).Parent)).Column.DataControl;
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top