Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Find root element of DataGridColumn

I am using the LogicalTreeHelper.GetParent() method recursively to find the root elements of various other WPF elements. This works fine with almost everything, but it fails for the DataGridColumn such as DataGridTextColumn. I found out that DataGridColumn is not part of the Logical Tree nor the Visual Tree. Can I somehow find the DataGrid it belongs to (and then get the root from the grid)?

Reading the MSDN documentation I could not find a suitable solution. Thank you.

My code to find the logical root:

private DependencyObject FindLogicalRoot(DependencyObject obj)
{
  if (obj == null)
     return null;
   else
   {
       var parent = LogicalTreeHelper.GetParent(obj);
       return parent != null ? FindLogicalRoot(parent) : obj;
   }
 }
like image 436
mbuchetics Avatar asked Dec 23 '10 11:12

mbuchetics


1 Answers

DataGridColumn has this property but it's private so you'll have to use reflection to get it. Either that or do some searching in the VisualTree and compare Columns for each DataGrid to the Column you want to find

public DataGrid GetDataGridParent(DataGridColumn column)
{
    PropertyInfo propertyInfo = column.GetType().GetProperty("DataGridOwner", BindingFlags.Instance | BindingFlags.NonPublic);
    return propertyInfo.GetValue(column, null) as DataGrid;
}
like image 102
Fredrik Hedblad Avatar answered Sep 27 '22 17:09

Fredrik Hedblad