DataGrid에 WPF 양식이 있습니다. 새 열은 버튼을 통해 사용자가 수동으로 DataGrid에 추가 할 수 있습니다.DataGrid에서 해당 열의 VisualTree를 다시 작성하는 방법
private void ColumnAdornerAddButton_MouseDown(object sender, MouseButtonEventArgs e)
{
DataGridTextAdornerColumn column = new DataGridTextAdornerColumn();
column.Header = "New column";
column.HeaderStyle = (Style)FindResource("columnHeader");
column.AdornerTemplate = (DataTemplate)FindResource("columnAdorner");
Binding binding = new Binding("Data");
binding.Mode = BindingMode.TwoWay;
column.Binding = binding;
grid.Columns.Insert(grid.Columns.Count - 1, column);
//Add adorner
DataGridColumnHeader header = GetColumnHeaderFromColumn(column);
AddAdorner(header, column.AdornerTemplate, column.IsReadOnly);
}
private DataGridColumnHeader GetColumnHeaderFromColumn(DataGridColumn column)
{
// dataGrid is the name of your DataGrid. In this case Name="dataGrid"
List<DataGridColumnHeader> columnHeaders = GetVisualChildCollection<DataGridColumnHeader>(grid);
foreach (DataGridColumnHeader columnHeader in columnHeaders)
{
if (columnHeader.Column == column)
{
return columnHeader;
}
}
return null;
}
문제는 내가 그리드에 열을 추가 한 후 헤더가 아직 생성되지 않고는 시각적 트리에 존재하지 않는 것입니다 :이 새 열을 추가하는 코드입니다. 따라서 새 열의 헤더를 가져 오지 말고 그것에 adorner를 적용합니다. 그리드의 시각적 트리에서 행운없이 재귀 적으로 ApplyTemplate을 호출하려고했습니다.
코드에서 새 열에 대해 DataGridColumnHeader를 생성하도록 그리드를 강제로 설정할 수있는 방법이 있습니까?
미리 감사드립니다.
대단히 감사합니다. 그것은 트릭을 만들었다. – Amid
흥미로운 메모. 사용자가 열을 재정렬 한 경우 호출 후 시각적 트리에서 순서가 변경되지 않지만 화면에서 순서가 변경됩니다. –