Frage

Ich bin mit der LogicalTreeHelper.GetParent() Methode rekursiv die Wurzelelemente von verschiedenen anderen WPF-Elementen zu finden. Dies funktioniert mit fast allem, aber es funktioniert nicht für die Datagrid wie DataGridTextColumn. Ich fand heraus, dass DataGridColumn nicht Teil des Logischen Baum noch der Baumstruktur ist. Kann ich irgendwie den DataGrid es gehört (und dann bekommt die Wurzel aus dem Netz) finden?

, um die MSDN-Dokumentation Lesen ich keine passende Lösung gefunden. Danke.

Mein Code die logische Wurzel zu finden:

private DependencyObject FindLogicalRoot(DependencyObject obj)
{
  if (obj == null)
     return null;
   else
   {
       var parent = LogicalTreeHelper.GetParent(obj);
       return parent != null ? FindLogicalRoot(parent) : obj;
   }
 }
War es hilfreich?

Lösung

Datagrid hat diese Eigenschaft, aber es ist privat, so dass Sie Reflektion verwenden müssen wird es zu bekommen. Entweder das, oder tun einige der Suche in der VisualTree und vergleichen Sie Spalten für jedes Datagrid auf die Spalte, die Sie finden möchten

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

Andere Tipps

var grid = ((Telerik.Windows.Controls.GridView.GridViewCellBase)
           ((sender as FrameworkElement).Parent)).Column.DataControl;
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top