I need to vertically center a DataGridCheckBoxColumn
. Since I did not find a Property inside DataGridCheckBoxColumn
, I applied an ElementStyl
When you set ElementStyle
on the DataGridCheckBoxColumn
you should include FrameworkElement.IsHitTestVisible="False" to your Style
:
<Setter Property="FrameworkElement.IsHitTestVisible" Value="False"/>
Also if you add TargetType="CheckBox"
to the Style
then you don't have to repeat FrameworkElement
for each Setter
anymore:
<DataGridCheckBoxColumn.ElementStyle>
<Style TargetType="CheckBox">
<Setter Property="Margin" Value="0,1,0,0" />
<Setter Property="VerticalAlignment" Value="Center" />
<Setter Property="HorizontalAlignment" Value="Center" />
<Setter Property="IsHitTestVisible" Value="False"/>
</Style>
</DataGridCheckBoxColumn.ElementStyle>
I have a suspicion that this is a bug (as it doesn't happen on other column types).
To work around it, all you need to do is make sure you base your style on the default style; by adding BasedOn="{x:Static DataGridCheckBoxColumn.DefaultElementStyle}"
to the Style
element:
<DataGrid IsReadOnly="True">
<DataGrid.Columns>
<DataGridCheckBoxColumn Header="Test" IsReadOnly="True" Binding="{Binding MyBinding}">
<DataGridCheckBoxColumn.ElementStyle>
<Style BasedOn="{x:Static DataGridCheckBoxColumn.DefaultElementStyle}">
<Setter Property="FrameworkElement.Margin" Value="0,1,0,0" />
<Setter Property="FrameworkElement.VerticalAlignment" Value="Center" />
<Setter Property="FrameworkElement.HorizontalAlignment" Value="Center" />
</Style>
</DataGridCheckBoxColumn.ElementStyle>
</DataGridCheckBoxColumn>
</DataGrid.Columns>
</DataGrid>
This approach has the advantage that you don't have to do lots of work if you are intending on changing the DataGrid.IsReadOnly
property at runtime.