2009-04-06 47 views

Respuesta

40

Es difícil de decir sin conocer detalles, pero aquí hay un DataGridTextColumn que se centra:

<wpf:DataGridTextColumn Header="Name" Binding="{Binding Name}" IsReadOnly="True"> 
    <wpf:DataGridTextColumn.CellStyle> 
     <Style> 
      <Setter Property="FrameworkElement.HorizontalAlignment" Value="Center"/> 
     </Style> 
    </wpf:DataGridTextColumn.CellStyle> 
</wpf:DataGridTextColumn> 
+0

¡Funcionó muy bien para mí incluso en diciembre de 2010! – ErocM

+6

Este enfoque no funcionó para mí. El texto estaba centrado, pero el ancho de la celda ya no coincidía con su encabezado. La solución de Mohammed funcionó mejor. –

+1

Como dijo Kiff, la celda también está cambiando. Debes apuntar a Textblock como el ejemplo de Mohammed A. Fadil. –

1

Ok, he utilizado el enfoque de FrameworkElement pero hubo un comportamiento extraño cuando intenta resaltar la fila.

He puesto otro ejemplo de alineación WPF Datagrid en este thread!

74

Si está utilizando DataGridTextColumn puede utilizar el código siguiente fragmento:

<Style TargetType="DataGridCell"> 
    <Style.Setters> 
      <Setter Property="TextBlock.TextAlignment" Value="Center" /> 
    </Style.Setters> 
</Style> 
+5

Esta es la mejor manera: establecer la alineación en la celda hace que la celda no ocupe su ancho, lo que parece extraño cuando se selecciona la fila – bruceboughton

+1

Inicialmente esto no funcionó para mí, pero después de un poco más de pruebas y de corregir algunos errores en mi El código de esta solución funcionó muy bien. ¡Gracias! – BrianVPS

+0

@BrianVPS Bienvenido, me complace escuchar eso: D –

12

+1 de Kent Boogaart. que terminé haciendo esto, lo que hace que el código algo menos cargada (y me permite utilizar la alineación en varias columnas):

<Resources> 
     <Style x:Key="NameCellStyle" TargetType="DataGridCell"> 
       <Setter Property="HorizontalAlignment" Value="Center" /> 
     </Style> 
</Resources> 


<DataGrid.Columns>       
    <DataGridTextColumn Header="Name" CellStyle="{StaticResource NameCellStyle}" Binding="{Binding Name}"/>        
    // .. other columns   
</DataGrid.Columns> 
+0

+1 por estilo, pero para mí 'HorizontalAlignment' no funciona, mientras que' HorizontalContentAlignment' sí. – Emmanuel

0

Mi solución favorita es:

<DataGridTextColumn Header="My Column" Binding="{Binding MyDBValue}" Width="100" > 
<DataGridTextColumn.CellStyle> 
     <Style> 
       <Setter Property="FrameworkElement.HorizontalAlignment" Value="Center"/> 
     </Style> 
</DataGridTextColumn.CellStyle> 

4

O en el código detrás:

grid.CellStyle = newCellStyle(); 

public static Style newCellStyle() 
{ 
    //And here is the C# code to achieve the above 
    System.Windows.Style style = new Style(typeof(DataGridCell)); 
    style.Setters.Add(new System.Windows.Setter 
    { 
     Property = Control.HorizontalAlignmentProperty, 
     Value = HorizontalAlignment.Center 
    }); 
    return style; 
} 
14

Empecé con la solución de huttelihut. Desafortunadamente, eso no funcionó para mí todavía. Pellizqué su respuesta y se acercó con esta (solución es alinear el texto a la derecha):

<Resources> 
    <Style x:Key="RightAligned" TargetType="TextBlock"> 
     <Setter Property="HorizontalAlignment" Value="Right"/> 
    </Style> 
</Resources> 

Como se puede ver, que aplica el estilo a un TextBlock, no el DataGridCell.

Y luego tuve que definir el estilo Elemento, no el estilocelular.

ElementStyle="{StaticResource RightAligned}" 
+1

Tenga en cuenta que esto no funciona con 'DataGridTextColumn' –

+0

@JP Hellemons: para mí funciona con' DataGridTextColumn' – Mikhail

2

Terminé teniendo problemas con la celda desplazada y buscando funky con la respuesta aceptada. Sé que es tarde, pero con suerte mis hallazgos ayudarán a alguien. Yo uso:

<DataGridTextColumn.ElementStyle> 
    <Style> 
      <Setter Property="FrameworkElement.HorizontalAlignment" Value="Center"/> 
    </Style> 

en lugar de la CellStyle.

7

Aquí es @ respuesta XAML de MohammedAFadil, convertidos a C# código detrás:

var MyStyle = new Style(typeof(DataGridCell)) { 
    Setters = { 
     new Setter(TextBlock.TextAlignmentProperty, TextAlignment.Center) 
    } 
}; 

Para aplicar el Style, establezca la propiedad de la CellStyleDataGrid, por ejemplo,

var MyGrid = new DataGrid() { 
    CellStyle = MyStyle 
}; 
+1

¡Simple y limpio! +1 :) Justo lo que necesitaba. –

0

Gracias Danny Beckett para convertir @ respuesta XAML de MohammedAFadil, se convirtió al código C#. Todas mis redes de datos están configuradas dinámicamente, por lo que puedo cambiar cualquier cosa, siempre.

Para configurar una cuadrícula de datos vacía, sin nada en ella y luego vincularla solo a los datos, simplemente tome su cuadrícula de datos.columnas

 var centerTextSetter = new Style(typeof(DataGridCell)) 
     { 
      Setters = { new Setter(TextBlock.TextAlignmentProperty, TextAlignment.Center) } 
     }; 
     DgDbNames.Columns.Add(new DataGridTextColumn() 
     { 
      Header = "Db Name", 
      Binding = new System.Windows.Data.Binding("DbName"), 
      IsReadOnly = true, 
      Width = new DataGridLength(0.2, DataGridLengthUnitType.Star), 
      CellStyle = centerTextSetter 
     }); 
Cuestiones relacionadas