Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to center WPF CheckBox within GridViewColumn?

Tags:

wpf

xaml

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>

enter image description here

like image 666
Friend Avatar asked Jan 27 '12 12:01

Friend


2 Answers

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>
like image 155
Glyn Richards Avatar answered Oct 16 '22 02:10

Glyn Richards


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>
like image 43
H.B. Avatar answered Oct 16 '22 00:10

H.B.