web-dev-qa-db-fra.com

Comment centrer le contenu des cellules dans une grille de données?

J'ai défini la hauteur minimale d'une grille de données de cette façon:

<DataGrid MinRowHeight="40">

Après avoir alimenté la grille de données avec des données, le texte de chaque cellule est aligné en haut et à gauche. Je n'ai pas pu trouver un moyen facile de centrer ce texte.

Des suggestions pour faire ça?

23
Francois

Solution finale:

<Style x:Key="DataGridContentCellCentering" TargetType="{x:Type DataGridCell}">
    <Setter Property="Template">
        <Setter.Value>
            <ControlTemplate TargetType="{x:Type DataGridCell}">
                <Grid Background="{TemplateBinding Background}">
                    <ContentPresenter VerticalAlignment="Center" />
                </Grid>
            </ControlTemplate>
        </Setter.Value>
    </Setter>
</Style>
41
Francois

Le code suivant centrera le contenu des cellules dans DataGrid:

<Style TargetType="DataGridCell">
    <Setter Property="TextBlock.TextAlignment" Value="Center" />
</Style>
22
lea

vous pouvez utiliser des styles. j'ajoute un échantillon pour DataGridCheckBoxColumn, j'espère que cela vous a mis dans la bonne direction.

<DataGridCheckBoxColumn Header="is active" IsReadOnly="False">
      <DataGridCheckBoxColumn.ElementStyle>
            <Style TargetType="CheckBox">
                 <Setter Property="VerticalAlignment" Value="Center"/>
                  <Setter Property="HorizontalAlignment" Value="Center"/>
             </Style>
      </DataGridCheckBoxColumn.ElementStyle>
      <DataGridCheckBoxColumn.Binding>
             <Binding Path="ISACTIVE" ValidatesOnDataErrors="True" Converter="{StaticResource MyBoolToIsActiveConverter}" Mode="TwoWay" UpdateSourceTrigger="PropertyChanged"
                                 NotifyOnValidationError="True" ValidatesOnExceptions="True">
                        </Binding>
                    </DataGridCheckBoxColumn.Binding>
                </DataGridCheckBoxColumn>
9
blindmeis

utiliser ElementStyle

 <DataGridTextColumn ElementStyle="{StaticResource Centering}"/>

  <Style x:Key="Centering" TargetType="{x:Type TextBlock}">
       <Setter Property="HorizontalAlignment" Value="Center" />
  </Style>
7
Meysam Chegini

Essayez de définir l'alignement vertical et horizontal du DataGrid sur Centre

<DataGrid VerticalContentAlignment="Center" HorizontalContentAlignment="Center" />

Si cela ne fonctionne pas, vous pouvez utiliser la solution dans cette réponse . Il utilise un style qui aligne le contenu des cellules DataGrid

6
Rachel

Modifiez votre étiquette de style comme ceci .....

 <Style x:Key="CellTextCentre" TargetType="DataGridCell">
    <Setter Property="TextBlock.TextAlignment" Value="Center"></Setter>
    <Setter Property="TextBlock.VerticalAlignment" Value="Center"></Setter> 
 </Style>
3
Arpit Shah

Voici une meilleure approche pour centrer le contenu verticalement:

<Style TargetType="{x:Type DataGridCell}" BasedOn="{StaticResource {x:Type DataGridCell}}">
    <Setter Property="Template">
        <Setter.Value>
            <ControlTemplate TargetType="{x:Type DataGridCell}">
                <Grid Background="{TemplateBinding Background}">
                    <ContentPresenter VerticalAlignment="Center" />
                </Grid>
            </ControlTemplate>
        </Setter.Value>
    </Setter>
</Style>
0
Apfelkuacha

Ce style définira VerticalAlignment sur Center pour tous les DataGridCells sans avoir besoin d'être appliqué explicitement.

<Style TargetType="DataGridCell">
    <Style.Resources>
        <Style TargetType="ContentPresenter">
            <Setter Property="VerticalAlignment" Value="Center" />
        </Style>
    </Style.Resources>
</Style>

Je trouve que c'est la solution la plus élégante.

0
The Pademelon

Voici une version légèrement plus longue de réponse d'Arpit Shah .

<DataGrid AutoGenerateColumns="False" IsReadOnly="True" ItemsSource="{Binding Rows}">
    <DataGrid.Resources>
        <Style x:Key="RightAligned" TargetType="DataGridCell">
            <Setter Property="HorizontalAlignment" Value="Right" />
        </Style>
    </DataGrid.Resources>
    <DataGrid.Columns>
        <DataGridTextColumn CellStyle="{StaticResource RightAligned}" 
                            Binding="{Binding Path=Quantity, Mode=OneWay}" 
                            Header="Quantity" Width="60" />
        <DataGridTextColumn Binding="{Binding Path=Category, Mode=OneWay}" 
                            Header="Category" Width="150" />
    </DataGrid.Columns>
</DataGrid>
0
Steven Davis