Найдите корневой элемент DataGridColumn
-
12-10-2019 - |
Вопрос
Я использую LogicalTreeHelper.GetParent()
метод рекурсивно, чтобы найти корневые элементы различных других элементов WPF. Это прекрасно работает практически со всем, но не удается для DataGridColumn, например, как DataGridTextColumn
Анкет я узнал что DataGridColumn
не является частью логического дерева, ни визуального дерева. Могу я как -то найти DataGrid
Это принадлежит (а затем получить корень из сетки)?
Читая документацию MSDN, я не смог найти подходящее решение. Спасибо.
Мой код, чтобы найти логический корень:
private DependencyObject FindLogicalRoot(DependencyObject obj)
{
if (obj == null)
return null;
else
{
var parent = LogicalTreeHelper.GetParent(obj);
return parent != null ? FindLogicalRoot(parent) : obj;
}
}
Решение
У DataGridColumn есть это свойство, но оно приватное, поэтому вам придется использовать отражение, чтобы получить его. Либо это, либо выполните поиск в Visualtre
public DataGrid GetDataGridParent(DataGridColumn column)
{
PropertyInfo propertyInfo = column.GetType().GetProperty("DataGridOwner", BindingFlags.Instance | BindingFlags.NonPublic);
return propertyInfo.GetValue(column, null) as DataGrid;
}
Другие советы
var grid = ((Telerik.Windows.Controls.GridView.GridViewCellBase)
((sender as FrameworkElement).Parent)).Column.DataControl;
Не связан с StackOverflow