質問

私はを使用しています LogicalTreeHelper.GetParent() 他のさまざまなWPF要素のルート要素を見つけるための方法。これはほとんどすべてで正常に動作しますが、そのようなデータグリッドコラムでは失敗します 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にはこのプロパティがありますが、プライベートなので、反射を使用してそれを取得する必要があります。それか、VisualTreeで検索を行い、各データグリッドの列を見つけたい列を比較します

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