5

このメソッドを再帰的に使用して、LogicalTreeHelper.GetParent()他のさまざまなWPF要素のルート要素を見つけています。これはほとんどすべてで正常に機能しますが、などのDataGridColumnでは失敗しますDataGridTextColumnDataGridColumnそれは論理ツリーにも視覚ツリーにも含まれていないことがわかりました。どういうわけかそれが属しているのを見つけることができますか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 の列を検索する列と比較します。

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 に答える