private static void HeaderTemplate_Changed(DependencyObject d, DependencyPropertyChangedEventArgs e) { DataGridRow dataGridRow = (DataGridRow)d; if (dataGridRow != null) { if (INTERNAL_VisualTreeManager.IsElementInVisualTree(dataGridRow._datagrid)) { if (e.NewValue != e.OldValue) { if (dataGridRow._headerUIElement != null && INTERNAL_VisualTreeManager.IsElementInVisualTree(dataGridRow._headerUIElement)) { //we remove the header that was there before the new one: dataGridRow._datagrid.RemoveElementFromGrid(dataGridRow._headerUIElement); } //we add the new header DataTemplate template = (DataTemplate)e.NewValue; if (template != null) { dataGridRow._headerUIElement = template.INTERNAL_InstantiateFrameworkTemplate(); Grid.SetRow(dataGridRow._headerUIElement, dataGridRow._rowIndex); Grid.SetColumn(dataGridRow._headerUIElement, 0); if (dataGridRow._headerUIElement is FrameworkElement) { ((FrameworkElement)dataGridRow._headerUIElement).DataContext = dataGridRow; } bool isCSSGrid = Grid_InternalHelpers.isCSSGridSupported(); if (isCSSGrid) { if (dataGridRow._headerUIElement is Control) { ((Control)dataGridRow._headerUIElement).BorderBrush = dataGridRow._datagrid.HorizontalGridLinesBrush; ((Control)dataGridRow._headerUIElement).BorderThickness = new Thickness(1, 0, 1, 1); } else if (dataGridRow._headerUIElement is Border) { ((Border)dataGridRow._headerUIElement).BorderBrush = dataGridRow._datagrid.HorizontalGridLinesBrush; ((Border)dataGridRow._headerUIElement).BorderThickness = new Thickness(1, 0, 1, 1); } } dataGridRow._datagrid.AddElementToGrid(dataGridRow._headerUIElement); } } } } }
private void ApplyContentTemplate(DataTemplate template) { object newChild; if (template == null) { newChild = this.Content; } else { FrameworkElement generatedContent = template.INTERNAL_InstantiateFrameworkTemplate(); if (generatedContent != null) { generatedContent.DataContext = this.Content; } newChild = generatedContent; } this.ChangeChild(newChild); }