63 votes

Alignement vertical du contenu de la ligne DataGrid

J'ai régulièrement un contrôle DataGrid à partir de WPF 4.0 RTM, où j'ai mis les données à partir de la base de données. Afin de rendre propre et lumineuse de style de grille de données j'utilise un haut/haut les lignes et par défaut DataGrid aligne le contenu des lignes en haut en position verticale, mais je veux établir un centre de l'alignement vertical.

J'ai déjà essayé d'utiliser cette propriété

VerticalAlignment="Center"

dans DataGrid options, mais il ne m'aide pas.

Voici un exemple de code XAML-code, décrivant mon DataGrid sans centre de l'alignement vertical:

<DataGrid x:Name="ContentDataGrid"
    Style="{StaticResource ContentDataGrid}"
    ItemsSource="{Binding}"
    RowEditEnding="ContentDataGrid_RowEditEnding">
<DataGrid.Columns>
    <DataGridTextColumn Header="UserID"
            Width="100"
            IsReadOnly="True"
            Binding="{Binding Path=userID}" />
    <DataGridTextColumn Header="UserName"
            Width="100"
            Binding="{Binding Path=userName}" />
    <DataGridTextColumn Header="UserAccessLevel"
            Width="100"
            Binding="{Binding Path=userAccessLevel}" />
    <DataGridTextColumn Header="UserPassword"
            Width="*"
            Binding="{Binding Path=userPassword}" />
</DataGrid.Columns>
</DataGrid>

Résultat de l'exécution de ce code:

alt text

Comme vous pouvez le voir sur toutes les rangées de contenu haut de la verticale aligner.

Ce que j'ai à ajouter pour obtenir le centre de l'alignement vertical de chaque ligne de contenu?

Merci.

127voto

Mike Points 1492

Solution complète de ce problème:

http://social.msdn.microsoft.com/Forums/en-US/wpf/thread/8c2aa3b1-d967-41ab-93c2-6c8cb1b7d29d/#488d0cdd-d0c2-469a-bfb6-8ca3d75426d4

En bref, dans le style jeu de fichiers:

<!--body content datagrid cell vertical centering-->
<Style x:Key="Body_Content_DataGrid_Centering"
        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>

Dans le fichier de la fenêtre:

<DataGrid x:Name="ContentDataGrid"
        Style="{StaticResource ContentDataGrid}"
        CellStyle="{StaticResource Body_Content_DataGrid_Centering}"
        ItemsSource="{Binding}"
        RowEditEnding="ContentDataGrid_RowEditEnding">
    <DataGrid.Columns>
        <DataGridTextColumn Header="UserID"
                Width="100"
                IsReadOnly="True"
                Binding="{Binding Path=userID}" />
        <DataGridTextColumn Header="UserName"
                Width="100"
                Binding="{Binding Path=userName}" />
        <DataGridTextColumn Header="UserAccessLevel"
                Width="100"
                Binding="{Binding Path=userAccessLevel}" />
        <DataGridTextColumn Header="UserPassword"
                Width="*"
                Binding="{Binding Path=userPassword}" />
    </DataGrid.Columns>
</DataGrid>

Cela vous donnera un résultat voulu:

alt text

57voto

jamier Points 352

Pour définir des alignements de texte individuels, vous pouvez utiliser:

 <DataGridTextColumn.ElementStyle>
   <Style TargetType="TextBlock">
       <Setter Property="TextAlignment" Value="Center" />
   </Style>
</DataGridTextColumn.ElementStyle>
 

22voto

matthewahansen Points 41

Le code suivant alignera verticalement le contenu d'une cellule DataGridTextColumn:

 <DataGridTextColumn.ElementStyle>
    <Style TargetType="TextBlock">
        <Setter Property="VerticalAlignment" Value="Center"></Setter>
    </Style>
</DataGridTextColumn.ElementStyle>
 

Edit: je suis revenu à ce problème et trouve la solution ci-dessous pour mieux fonctionner, il va centrer le contenu de toutes les cellules de DataGridTextRows à la fois horizontalement et verticalement.

 <UserControl.Resources>    
    <ResourceDictionary>
        <Style TargetType="DataGridCell">
            <Setter Property="HorizontalAlignment" Value="Stretch"></Setter>
            <Setter Property="VerticalAlignment" Value="Stretch"></Setter>
            <Setter Property="VerticalContentAlignment" Value="Stretch"></Setter>
            <Setter Property="TextBlock.TextAlignment" Value="Center"></Setter>
            <Setter Property="TextBlock.VerticalAlignment" Value="Center"></Setter>
        </Style>    
    </ResourceDictionary>
</UserControl.Resources>
 

16voto

usefulBee Points 492

Vous pouvez également faire sans remplacer le ControlTemplate:

     <Style TargetType="{x:Type DataGridCell}">
    <Setter Property="VerticalAlignment" Value="Center" />
    </Style>
 

5voto

Nick Desjardins Points 6763

La valeur d'attribut VerticalAlignment="Center" centre le DataGrid dans son élément parent.

Vous voulez probablement VerticalContentAlignment .

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X