Pregunta

Estoy utilizando el método LogicalTreeHelper.GetParent() de forma recursiva para encontrar los elementos fundamentales de varios otros elementos de WPF. Esta bien trabaja con casi todo, pero no para la DataGridColumn como DataGridTextColumn. Descubrí que DataGridColumn no es parte del Árbol Lógico ni el árbol visual. ¿Hay algún modo de encontrar el DataGrid al que pertenece (y luego obtener la raíz de la red)?

La lectura de la documentación de MSDN no pude encontrar una solución adecuada. Gracias.

Mi código para encontrar la raíz lógica:

private DependencyObject FindLogicalRoot(DependencyObject obj)
{
  if (obj == null)
     return null;
   else
   {
       var parent = LogicalTreeHelper.GetParent(obj);
       return parent != null ? FindLogicalRoot(parent) : obj;
   }
 }
¿Fue útil?

Solución

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;
}

Otros consejos

var grid = ((Telerik.Windows.Controls.GridView.GridViewCellBase)
           ((sender as FrameworkElement).Parent)).Column.DataControl;
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top