2011-01-12 17 views
31

¿Qué se debe hacer para obtener un WGD DataGrid con celdas que envuelvan texto en lugar de truncarlo?¿Cómo se obtiene una cuadrícula de datos WPF con celdas que envuelven texto en lugar de truncarlo?

En este momento, cuando un texto es más grande y no cabe en una columna, el texto se trunca y los usuarios no pueden verlo porque la propiedad IsReadOnly del DataGrid es verdadera. Lo que quiero es que el texto en las celdas se envuelva y la altura de la celda (SIN ANCHO DE CELDA) aumente la cantidad necesaria para mostrar todo el texto.

Respuesta

7

Puede tratar de moldear las celdas con TextBlock que tiene habilitado el ajuste de texto.

+9

Muchas gracias. Ya resolvió el problema con los estilos. Quiero decir, establecer la propiedad ElementStyle de DataGridTextColumn en algo que tenga un setter como "". Me parece que es mejor cambiar el estilo de un control como una manera de personalizar el control en lugar de reescribir su plantilla. De todos modos, estoy abierto a sugerencias, porque soy novato en WPF. Mi problema es que simplemente no puedo aplicar un estilo ala TargetType cos parece que de alguna manera el TextBlock tiene un estilo especificado que sobrescribe los estilos de tipo Target de ala aplicados. Gracias de nuevo. –

+1

Usar un estilo para eso es una buena idea, no creo que haya una solución mejor (al menos para este caso específico) –

+0

El problema es cuando se utiliza una columna de plantilla que se pierde la funcionalidad básica, como copiar el texto. Actualmente estoy enfrentando este problema y usaré un estilo en su lugar. – Sven

68

Gracias por su ayuda, esto hizo el truco para mí (alineación es opcional):

<DataGrid.Columns>    
    <DataGridTextColumn Header="Wrapped & centered" Binding="{Binding field}"> 
     <DataGridTextColumn.ElementStyle> 
      <Style>        
       <Setter Property="TextBlock.TextWrapping" Value="Wrap" /> 
       <Setter Property="TextBlock.TextAlignment" Value="Center"/> 
      </Style> 
     </DataGridTextColumn.ElementStyle> 
    </DataGridTextColumn> 
</DataGrid.Columns> 
+3

Para otros: si esta solución no funciona para usted, intente ajustar el ancho de la columna. Tratará de ampliar el ancho de la columna antes de que comience a envolver el texto. – DLeh

+0

Ajusta el ancho de qué manera? Estoy probando el código aquí, pero parece no ser diferente en el diseñador de WPF en Visual Studio. –

+0

establezca la propiedad Width en la DataGridTextColumn como: Rossco

9

Hice algo similar a la solución D.Rosados. Sin embargo, el mío es reutilizable si tienes más columnas que necesitan envolverse.

<UserControl.Resources> 
    <Style TargetType="{x:Type TextBlock}" x:Key="WrapText"> 
     <Setter Property="TextWrapping" Value="Wrap"/> 
    </Style> 
</UserControl.Resources> 

<DataGrid.Columns> 
    <DataGridTextColumn IsReadOnly="False" Header="Address" 
    Binding="{Binding Address}" ElementStyle="{StaticResource WrapText}" Width="150"/> 
</DataGrid.Columns> 
Cuestiones relacionadas