How to center WPF CheckBox within GridViewColumn?
<GridViewColumn Width="60" Header="Success">
<GridViewColumn.CellTemplate>
<DataTemplate>
<CheckBox IsChecked="{Binding Path=IsSuccess}">
</CheckBox>
</DataTemplate>
</GridViewColumn.CellTemplate>
</GridViewColumn>
UPDATES:
This solution works fine but it destroys Expression Dark theme for cells... (I don't know for know how to fix it...)
<ListView Name="HistoryTable" Width="783" VerticalAlignment="Stretch" VerticalContentAlignment="Top" Height="195">
<ListView.ItemContainerStyle>
<Style TargetType="ListViewItem">
<Setter Property="HorizontalContentAlignment" Value="Stretch" />
</Style>
</ListView.ItemContainerStyle>
<ListView.Resources>
<Style TargetType="{x:Type CheckBox}" x:Key="DataGridCheckBox">
<Setter Property="HorizontalAlignment" Value="Center" />
<Setter Property="HorizontalContentAlignment" Value="Center" />
<Setter Property="IsEnabled" Value="False" />
<Setter Property="Margin" Value="4" />
<Setter Property="VerticalAlignment" Value="Center" />
<Setter Property="VerticalContentAlignment" Value="Center" />
<Setter Property="Width" Value="{Binding RelativeSource={RelativeSource FindAncestor,AncestorType={x:Type GridViewColumn}},Path=ActualWidth}" />
</Style>
</ListView.Resources>
<ListView.View>
<GridView>
<GridViewColumn DisplayMemberBinding="{Binding Filename}" Width="140" Header="{lex:LocTextExtension Key=Name, Dict=Resources, Assembly=PreShow.Player}" />
<GridViewColumn Width="60" Header="{lex:LocTextExtension Key=Success, Dict=Resources, Assembly=PreShow.Player}">
<GridViewColumn.CellTemplate>
<DataTemplate>
<DockPanel HorizontalAlignment="Center">
<CheckBox IsChecked="{Binding Path=IsSuccess}" Style="{StaticResource DataGridCheckBox}">
</CheckBox>
</DockPanel>
</DataTemplate>
</GridViewColumn.CellTemplate>
</GridViewColumn>
Bind a new Grid's column width (in the DataTemplate) to that of the GridView's column width.
<GridViewColumn Header="Header="{StaticResource CheckBoxHeaderText}" x:Name="CheckBoxColumn" Width="125">
<GridViewColumn.CellTemplate>
<DataTemplate>
<Grid Width="{Binding ElementName=CheckBoxColumn, Path=Width}">
<CheckBox HorizontalAlignment="Center" IsChecked="{Binding IsCheckBoxChecked, Mode=OneWay}" />
</Grid>
</DataTemplate>
</GridViewColumn.CellTemplate>
</GridViewColumn>
This should be the bare-bone setup:
<ListView.Resources>
<!-- Alternatively use the ItemContainerStyle of course -->
<Style TargetType="ListViewItem" BasedOn="{StaticResource {x:Type ListViewItem}}">
<Setter Property="HorizontalContentAlignment" Value="Stretch"/>
</Style>
<!-- Use BasedOn to preserve existing style -->
<Style TargetType="CheckBox" BasedOn="{StaticResource {x:Type CheckBox}}">
<Setter Property="VerticalAlignment" Value="Center"/>
<Setter Property="HorizontalAlignment" Value="Center"/>
</Style>
</ListView.Resources>
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With