使用复选框格式化 XAML DataGrid 列 Header

Format XAML DataGrid Column Header with Checkbox

我正在使用 MahApps Metro Style 格式化 WPF DataGrid

<DataGrid x:Name="routes" ItemsSource="{Binding Routes}" AutoGenerateColumns="False" Style="{StaticResource AzureDataGrid}" CanUserAddRows="False" ColumnWidth="*" >
    <DataGrid.Columns>
          <DataGridCheckBoxColumn Binding="{Binding Active}" MaxWidth="80" ElementStyle="{DynamicResource MetroDataGridCheckBox}" EditingElementStyle="{DynamicResource MetroDataGridCheckBox}">
                <DataGridCheckBoxColumn.Header>
                     <CheckBox Name="chkSelectAllRoutes" Checked="chkSelectAllRoutes_Checked" Unchecked="chkSelectAllRoutes_Unchecked" IsChecked="True" ></CheckBox>
                 </DataGridCheckBoxColumn.Header>
           </DataGridCheckBoxColumn>

           <DataGridTemplateColumn MaxWidth="40">
                  <DataGridTemplateColumn.CellTemplate>
                        <DataTemplate>
                              <Button Click="btnSearchAtRoute_Click" Tag="{Binding Identifier}" >
                                        <iconPacks:Material Kind="MapMarkerPath" />
                              </Button>                                  
                        </DataTemplate>
                  </DataGridTemplateColumn.CellTemplate>
           </DataGridTemplateColumn>
                    
           <DataGridTextColumn Binding="{Binding Name}" IsReadOnly="True" Header="Name"/>
           <DataGridTextColumn Binding="{Binding Distance, StringFormat=N2}" IsReadOnly="True" Header="Distance in KM"/>
    </DataGrid.Columns>
</DataGrid>

第一列包含 header 和项目级别的 CheckBox。结果显示在下面的屏幕截图中。 header 复选框左对齐,而项目复选框在列中居中。

如何让 header 复选框看起来像项目复选框(居中对齐)?

您可以使用列 header 样式使复选框居中。

<DataGridCheckBoxColumn Binding="{Binding Active}" MaxWidth="80" ElementStyle="{DynamicResource MetroDataGridCheckBox}" EditingElementStyle="{DynamicResource MetroDataGridCheckBox}">

   <DataGridCheckBoxColumn.HeaderStyle>
      <Style TargetType="{x:Type DataGridColumnHeader}">
         <Setter Property="HorizontalContentAlignment" Value="Center"/>
      </Style>
   </DataGridCheckBoxColumn.HeaderStyle>

   <DataGridCheckBoxColumn.Header>
      <CheckBox Name="chkSelectAllRoutes" Checked="chkSelectAllRoutes_Checked" Unchecked="chkSelectAllRoutes_Unchecked" IsChecked="True" ></CheckBox>
   </DataGridCheckBoxColumn.Header>

</DataGridCheckBoxColumn>