2013-08-11 34 views
23

Sto programmando con WPF. Ho bisogno di un modo per rendere il contenuto centrale delle celle, nel controllo DataGrid. Io uso questo codice anche:Allineamento del testo in DataGrid

<DataGrid x:Name="dg1" HorizontalAlignment="Left" Margin="10,10,0,0" 
    VerticalAlignment="Top" Height="360" Width="498" 
    FontFamily="2 Badr" FontSize="18" 
    AlternatingRowBackground="LightCoral" FlowDirection="RightToLeft" 
    HorizontalContentAlignment="Center" VerticalContentAlignment="Center" 
    Background="{x:Null}"/> 

Cosa c'è che non va?

Cosa posso fare?

Si prega di offrire le risposte in XAML (Just XAML).

+4

Duplicato: http://stackoverflow.com/questions/6072093/how-to-center-the-content-of-cells-in-a-data-grid –

+0

Possibile duplicato di [Allineamento del testo in un DataGrid WPF] (http://stackoverflow.com/questions/720732/text-alignment-in-a-wpf-datagrid) – bouvierr

risposta

62

È necessario impostare lo stile DataGridCell

<DataGrid> 
     <DataGrid.Columns> 
      <DataGridTextColumn> 
       <DataGridTextColumn.ElementStyle> 
        <Style TargetType="TextBlock"> 
         <Setter Property="HorizontalAlignment" Value="Center" /> 
        </Style> 
       </DataGridTextColumn.ElementStyle> 
      </DataGridTextColumn> 
     </DataGrid.Columns> 
    </DataGrid> 
+0

(a Lai32290) Questa non è la mia risposta. La tua risposta aggiunge una colonna al mio DataSet e non imposta al centro nemmeno uno dei contenuti della mia cella. –

+3

Questa risposta mi sembra corretta: come prevedi di sapere se il contenuto della cella è allineato correttamente senza aggiungere almeno una colonna? – Andrew

+0

(a Babak) Spiacente, quel codice non ha funzionato, ho modificato il mio codice, per favore riprova – Lai32290

3

Forse solo creare uno stile:

<Window.Resources> 
    <Style TargetType="DataGridCell"> 
     <Setter Property="HorizontalAlignment" Value="Center" /> 
    </Style> 
</Window.Resources> 

cura.

+1

Come utilizzare questo nel mio codice? per favore spiega di più Sono nuovo in xaml –

+1

Puoi aggiungere lo stile nella risorsa della tua finestra – Daniel

+0

Non carino per me perché il tuo bordo/dimensione della casella di testo forse non riempie completamente la dimensione della cella.Quindi preferisco la risposta di Lai32290 – Nelly

1

In caso in cui si desidera centrare le date in un DataGridTemplateColumn

<DataGridTemplateColumn SortMemberPath="DataDiNascita" Header="Data di nascita" IsReadOnly="False"> 
       <DataGridTemplateColumn.CellEditingTemplate>       
        <DataTemplate> 
         <DatePicker SelectedDate="{Binding Path=DataDiNascita,Mode=TwoWay}" VerticalAlignment="Center" HorizontalAlignment="Left">         
         </DatePicker>       
        </DataTemplate> 
       </DataGridTemplateColumn.CellEditingTemplate> 
       <DataGridTemplateColumn.CellTemplate>       
        <DataTemplate> 
         <TextBlock Text="{Binding Path=DataDiNascita,Mode=TwoWay,StringFormat=\{0:dd/MM/yyyy\}}" VerticalAlignment="Center" HorizontalAlignment="Left">        
         </TextBlock> 
        </DataTemplate> 
       </DataGridTemplateColumn.CellTemplate> 
      </DataGridTemplateColumn> 
1

per influenzare tutto colonna

<Window.Resources> 
     <Style TargetType="DataGridColumnHeader"> 
      <Setter Property="HorizontalAlignment" Value="Stretch"/> 
      <Setter Property="HorizontalContentAlignment" Value="Center"/> 
     </Style> 
</Window.Resources> 
3

Come detto in altre risposte:

<Setter Property="HorizontalAlignment" Value="Center" /> 

HorizontalAlignment

Ciò influenzerà tutti gli altri stili come lo sfondo. Per centrare solo il testo utilizzare questo invece:

<Setter Property="TextAlignment" Value="Center" /> 

textalign

5

Per chi ha bisogno di formattare una sola colonna DataGrid dinamica in VB.NET da uno stile personalizzato XAML:

In Application.xaml :

<Application.Resources> 
    <ResourceDictionary> 
     <Style x:Key="DataGridCellCentered" TargetType="DataGridCell"> 
      <Setter Property="TextBlock.TextAlignment" Value="Center" /> 
     </Style> 
    </ResourceDictionary> 
</Application.Resources> 

Nel codice VB.NET:

Me.MyDataGrid.Columns(5).CellStyle = TryFindResource("DataGridCellCentered") 

Saluti!

Problemi correlati