Вопрос

Я использую 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;
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top