Найти корневой элемент DataGridColumn - PullRequest
4 голосов
/ 23 декабря 2010

Я использую метод 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;
   }
 }

Ответы [ 2 ]

5 голосов
/ 23 декабря 2010

DataGridColumn имеет это свойство, но оно является закрытым, поэтому вам придется использовать отражение, чтобы получить его. Либо так, либо выполните поиск в VisualTree и сравните столбцы для каждой таблицы данных с столбцом, который вы хотите найти

public DataGrid GetDataGridParent(DataGridColumn column)
{
    PropertyInfo propertyInfo = column.GetType().GetProperty("DataGridOwner", BindingFlags.Instance | BindingFlags.NonPublic);
    return propertyInfo.GetValue(column, null) as DataGrid;
}
0 голосов
/ 16 мая 2012
var grid = ((Telerik.Windows.Controls.GridView.GridViewCellBase)
           ((sender as FrameworkElement).Parent)).Column.DataControl;
...