Хотя ответ Фредрика предоставляет переработанный подход с дополнительным методом, который потенциально может быть повторно использован в других частях кода, я предпочел объединить его методы в один единственный метод.Может также наблюдаться небольшой прирост производительности, поскольку он может завершить поиск, как только найдет заголовок, и ему не нужно продолжать поиск по всем дочерним элементам в визуальном дереве (это, скорее всего, незначительно в большинстве случаев).
private DataGridColumnHeader GetHeader(DataGridColumn column, DependencyObject reference)
{
for (int i = 0; i < VisualTreeHelper.GetChildrenCount(reference); i++)
{
DependencyObject child = VisualTreeHelper.GetChild(reference, i);
DataGridColumnHeader colHeader = child as DataGridColumnHeader;
if ((colHeader != null) && (colHeader.Column == column))
{
return colHeader;
}
colHeader = GetHeader(column, child);
if (colHeader != null)
{
return colHeader;
}
}
return null;
}
И это используется так:
DataGridColumnHeader colHeader = GetHeader(column, myDataGrid);
if (colHeader == null) { /* Not found */ }