У вас есть много вариантов.Одним из них является создание собственного шаблона для стиля заголовка DataGrid.Внутри тега DataTemplate вы можете изменить шаблон заголовков.(Вы можете заменить кнопку на TextBlock или что угодно.)
<DataGrid>
<DataGrid.ColumnHeaderStyle>
<Style TargetType="DataGridColumnHeader" >
<Setter Property="Foreground" Value="Blue" />
<Setter Property="ContentTemplate" >
<Setter.Value>
<DataTemplate>
<Button Content={Binding Content}" MouseDown="mouseDownEventHandler">
</DataTemplate>
</Setter.Value>
</Setter>
</Style>
</DataGrid.ColumnHeaderStyle>
</DataGrid>
или если вы используете DataGrid.Columns для заполнения ваших столбцов, и вам нужно установить каждый из них отдельно, вы можете использовать это:
<DataGrid>
<DataGrid.Columns>
<DataGridTextColumn HeaderTemplate="{StaticResource MyTemplate1"/>
<DataGridHyperlinkColumn HeaderTemplate="{StaticResource MyTemplate2"/>
</DataGrid.Columns>
</DatGrid>
, где MyTemplate1 и 2 должны быть предварительно определены в ресурсах вашего элемента управления.
Редактировать:
Другой подход согласно этой ссылке - добавить PreviewMouseDown к вашей DataGrid, а затем выяснить, произошло ли нажатие мыши на заголовок или нет.
Это простая версия ее обработчика события:
DependencyObject dep = (DependencyObject)e.OriginalSource;
while ((dep != null) && !(dep is DataGridColumnHeader))
{
dep = VisualTreeHelper.GetParent(dep);
}
if (dep == null) return;
if (dep is DataGridColumnHeader)
{
MessageBox.Show(((DataGridColumnHeader)dep).Content.ToString());
}