DataGrid を使用した WPF フォームがあります。ボタンを使用して、ユーザーが手動で新しい列をデータグリッドに追加できます。これは、新しい列を追加するコードです。
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 を生成するようにグリッドを強制する方法はありますか?
前もって感謝します。