5

我正在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;
   }
 }
4

2 回答 2

6

DataGridColumn 具有此属性,但它是私有的,因此您必须使用反射来获取它。要么在 VisualTree 中进行一些搜索,然后将每个 DataGrid 的 Columns 与您要查找的 Column 进行比较

public DataGrid GetDataGridParent(DataGridColumn column)
{
    PropertyInfo propertyInfo = column.GetType().GetProperty("DataGridOwner", BindingFlags.Instance | BindingFlags.NonPublic);
    return propertyInfo.GetValue(column, null) as DataGrid;
}
于 2010-12-23T14:32:42.140 回答
0
var grid = ((Telerik.Windows.Controls.GridView.GridViewCellBase)
           ((sender as FrameworkElement).Parent)).Column.DataControl;
于 2012-05-16T13:29:19.797 回答