我有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;
}
的問題是,後我加入了列電網尚未產生它的頭,它不存在於視覺樹。因此我無法獲得新列的標題並將其應用於它。 我試圖在網格的可視化樹上遞歸調用ApplyTemplate,但沒有任何運氣。
有什麼辦法強制網格生成DataGridColumnHeader代碼中的新列?
預先感謝您。
非常感謝。這就是訣竅。 – Amid 2012-07-18 17:07:39
有趣的音符。如果用戶重新排序了列,他們不會在此次調用之後更改可視化樹中的順序,但它們確實改變了屏幕上的順序。 – 2012-09-06 20:50:22