private static HierarchicalGroupByControlNode GetHierarchicalGroupByControlNode(UIElement element) { HierarchicalGroupByControlNode hierarchicalGroupByControlNode = element as HierarchicalGroupByControlNode; if (hierarchicalGroupByControlNode != null) { return(hierarchicalGroupByControlNode); } int childCount = VisualTreeHelper.GetChildrenCount(element); for (int i = 0; i < childCount; i++) { UIElement child = VisualTreeHelper.GetChild(element, i) as UIElement; if (child != null) { hierarchicalGroupByControlNode = HierarchicalGroupByControl.GetHierarchicalGroupByControlNode(child); } if (hierarchicalGroupByControlNode != null) { break; } } return(hierarchicalGroupByControlNode); }
internal HierarchicalGroupByControlNode GetHierarchicalGroupByControlNodeFromHierarchicalGroupByItem(HierarchicalGroupByItem hierarchicalGroupByItem) { Debug.Assert(hierarchicalGroupByItem != null); if (hierarchicalGroupByItem == null) { return(null); } TreeView treeView = this.GetTemplateChild(@"PART_HierarchicalGroupByControlTreeView") as TreeView; if (treeView == null) { return(null); } if (treeView.Items.Count == 0) { throw new DataGridInternalException("The HierarchicalGroupByControl should contain at least one grouping level."); } // The first item is always the top level HierarchicalGroupByControlNode TreeViewItem rootItem = treeView.ItemContainerGenerator.ContainerFromItem(treeView.Items[0]) as TreeViewItem; if (rootItem == null) { throw new DataGridInternalException("The root item is null."); } GroupLevelDescription detailGroupLevelDescription = hierarchicalGroupByItem.Content as GroupLevelDescription; Debug.Assert(detailGroupLevelDescription != null); TreeViewItem dropMarkedTreeViewItem = null; DataGridContext rootDataGridContext = rootItem.Header as DataGridContext; Debug.Assert(rootDataGridContext != null); if (rootDataGridContext.GroupLevelDescriptions.Contains(detailGroupLevelDescription)) { dropMarkedTreeViewItem = rootItem; } else { dropMarkedTreeViewItem = HierarchicalGroupByControl.GetTreeViewItemFromGroupLevelDescription(rootItem, detailGroupLevelDescription); } // If null, it means the cell does not belong to this detail if (dropMarkedTreeViewItem == null) { return(null); } ContentPresenter treeViewItemHeader = dropMarkedTreeViewItem.Template.FindName("PART_Header", dropMarkedTreeViewItem) as ContentPresenter; Debug.Assert(treeViewItemHeader != null); if (treeViewItemHeader == null) { throw new DataGridInternalException("An error occurred while retrieving the PART_Header template part of an item containing a HierarchicalGroupByControlNode."); } HierarchicalGroupByControlNode hierarchicalGroupByControlNode = HierarchicalGroupByControl.GetHierarchicalGroupByControlNode(treeViewItemHeader); return(hierarchicalGroupByControlNode); }
internal HierarchicalGroupByControlNode GetHierarchicalGroupByControlNodeFromColumnManagerCell(ColumnManagerCell cell) { Debug.Assert(cell != null); if (cell == null) { return(null); } DataGridContext cellDataGridContext = DataGridControl.GetDataGridContext(cell); if (cellDataGridContext == null) { throw new DataGridInternalException("A DataGridContext cannot be null on ColumnManagerCell."); } TreeView treeView = this.GetTemplateChild(@"PART_HierarchicalGroupByControlTreeView") as TreeView; if (treeView == null) { return(null); } if (treeView.Items.Count == 0) { throw new DataGridInternalException("The HierarchicalGroupByControl should contain at least one grouping level."); } // The first item is always the top level HierarchicalGroupByControlNode TreeViewItem rootItem = treeView.ItemContainerGenerator.ContainerFromItem(treeView.Items[0]) as TreeViewItem; // It may not be visible if (rootItem == null) { return(null); } TreeViewItem dropMarkedTreeViewItem = null; DataGridContext rootDataGridContext = rootItem.Header as DataGridContext; if ((rootDataGridContext != null) && (rootDataGridContext.GroupLevelDescriptions == cellDataGridContext.GroupLevelDescriptions)) { dropMarkedTreeViewItem = rootItem; } else { GroupLevelDescriptionCollection groupLevelDescriptions = cellDataGridContext.GroupLevelDescriptions; dropMarkedTreeViewItem = HierarchicalGroupByControl.GetTreeViewItemFromGroupLevelDescriptionCollection(rootItem, groupLevelDescriptions); } // If null, it means the cell does not belong to this detail if (dropMarkedTreeViewItem == null) { return(null); } ContentPresenter treeViewItemHeader = dropMarkedTreeViewItem.Template.FindName("PART_Header", dropMarkedTreeViewItem) as ContentPresenter; // It may not be visible if (treeViewItemHeader == null) { return(null); } HierarchicalGroupByControlNode hierarchicalGroupByControlNode = HierarchicalGroupByControl.GetHierarchicalGroupByControlNode(treeViewItemHeader); return(hierarchicalGroupByControlNode); }