datagridcolumnのルート要素を見つけます
-
12-10-2019 - |
質問
私はを使用しています 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;
所属していません StackOverflow