Trouver élément racine de DataGridColumn
-
12-10-2019 - |
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;
}
}
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;