Encuentra elemento raíz de DataGridColumn
-
12-10-2019 - |
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;
}
}
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;