Domanda

Sto usando il metodo LogicalTreeHelper.GetParent() in modo ricorsivo per trovare gli elementi radice di vari altri elementi WPF. Questo funziona bene con quasi tutto, ma non riesce per il DataGridColumn come DataGridTextColumn. Ho scoperto che DataGridColumn non fa parte della Struttura Logica né Visual Tree. Posso in qualche modo trovare il DataGrid a cui appartiene (e quindi ottenere la radice dalla rete)?

La lettura della documentazione MSDN non riuscivo a trovare una soluzione adeguata. Grazie.

Il mio codice per trovare la radice logica:

private DependencyObject FindLogicalRoot(DependencyObject obj)
{
  if (obj == null)
     return null;
   else
   {
       var parent = LogicalTreeHelper.GetParent(obj);
       return parent != null ? FindLogicalRoot(parent) : obj;
   }
 }
È stato utile?

Soluzione

DataGridColumn ha questa proprietà, ma è privato quindi si dovrà utilizzare la riflessione per ottenerlo. Uno che o fare qualche ricerca nel VisualTree e confrontare colonne per ogni DataGrid per la colonna che si desidera trovare

public DataGrid GetDataGridParent(DataGridColumn column)
{
    PropertyInfo propertyInfo = column.GetType().GetProperty("DataGridOwner", BindingFlags.Instance | BindingFlags.NonPublic);
    return propertyInfo.GetValue(column, null) as DataGrid;
}

Altri suggerimenti

var grid = ((Telerik.Windows.Controls.GridView.GridViewCellBase)
           ((sender as FrameworkElement).Parent)).Column.DataControl;
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top