使用复选框格式化 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>
我正在使用 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>