Не уверен, что это поможет, но один подход, который я использовал в прошлом, чтобы отделить столбцы от их заголовков и представить их отдельно.
Определения столбцов определены в ресурсах:
<UserControl.Resources>
<ResourceDictionary>
<GridViewColumnCollection x:Key="siColumnCollection">
<GridViewColumn>
<GridViewColumn.CellTemplate>
<DataTemplate>
...
</DataTemplate>
</GridViewColumn.CellTemplate>
<GridViewColumnHeader Content="Fish"/>
</GridViewColumn>
...
Затем заголовки и представление списка представлены отдельно, оба ссылаются на один и тот же ресурс:
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="Auto"/>
<RowDefinition Height="*"/>
</Grid.RowDefinitions>
<GridViewHeaderRowPresenter Columns="{StaticResource siColumnCollection}"/>
<ListView Grid.Row="1" ItemsSource="{Binding ViewModelList}">
<ListView.Resources>
<DataTemplate x:Key="siNormalRowTemplate">
<GridViewRowPresenter Columns="{StaticResource siColumnCollection}"/>
</DataTemplate>
</ListView.Resources>
</ListView>
</Grid>
(я не могу обещать, что этот XAML работает точно так, как написано, но дает вам идею).
Преимущество этого соглашения заключается в том, что вы можете обрабатывать заголовки и основную часть списка отдельно.Поэтому, если вы хотите добавить какой-либо наполнитель сразу после GridViewHeaderRowPresenter, вы можете это сделать.
Редактировать : это решение работает, если у вас есть GridView, но, к сожалению, не работает дляDataGrid.Я не вижу эквивалентного способа разделения заголовка и строк в DataGrid, поэтому этот ответ будет работать только в том случае, если вы готовы поменять DataGrid на GridView.Извините!