2009-08-17 8 views

Respuesta

1

Puede crear un Style global para sus encabezados de columna. Sin ningún ejemplo de marcado no sé la sintaxis, pero debería ser algo como esto:

<Style TargetType="{x:Type dg:ColumnHeader}"> 
    <Setter Property="TextWrapping" Value="Wrap"/> 
</Style> 

Desde el Style es sin llaves, que se aplicará automáticamente a todos sus títulos de las columnas. Y los estilos no anularán ninguna propiedad establecida localmente, por lo que no "desactivará" ninguna funcionalidad de encabezado existente.

+0

Gracias por su sugerencia, pero no he podido lograr que este enfoque funcione.Sin embargo, encontré que puedo obtener el resultado deseado si en lugar de asignar una cadena a la propiedad DataGridColumn.Header, creo un TextBlock que contiene mi cadena y establezco la propiedad TextWrapping del bloque de texto en "Ajustar". –

+0

¿qué hay de envolver el contenido sin encabezado? –

10

En lugar de asignar el nombre de columna directamente a la propiedad DataGridColumn.Header, creé un TextBlock que contenía el nombre de columna, establecí la propiedad TextWrapping del TextBlock en "Ajustar" y asigné TextBlock a la propiedad DataGridColumn.Header. Esto preserva la funcionalidad del encabezado predeterminado.

Ejemplo:

<toolkit:DataGridTextColumn Binding="{Binding Path=MyProperty}"> 
    <toolkit:DataGridTextColumn.Header> 
     <TextBlock Text="Something Longer" TextWrapping="Wrap" /> 
    </toolkit:DataGridTextColumn.Header> 
</toolkit:DataGridTextColumn> 
20

me gustaría para permitir el ajuste de texto en todos los títulos de las columnas de mi DataGrid, sin desactivar el otro funcionalidad encabezado predeterminado

es necesario agregar el siguiente espacio de nombre para su archivo app.xaml:

xmlns:primitives="clr-namespace:Microsoft.Windows.Controls.Primitives;assembly=WPFToolkit" 

y luego añadir esta etiqueta a App.xaml:

<Style TargetType="{x:Type primitives:DataGridColumnHeader}"> 
    <Setter Property="ContentTemplate"> 
     <Setter.Value> 
      <DataTemplate> 
       <TextBlock TextWrapping="Wrap" Text="{Binding}"></TextBlock> 
      </DataTemplate> 
     </Setter.Value> 
    </Setter> 
</Style> 

Esto agregará de ajuste de texto a los encabezados de todos sus DataGrids a través de su aplicación de WPF.

Mientras estamos en el tema, si sólo quería a centro el texto de cada uno de los encabezados de DataGrid, puede hacerlo utilizando el siguiente estilo en su lugar:

<Style TargetType="{x:Type primitives:DataGridColumnHeader}"> 
    <Setter Property="HorizontalContentAlignment" Value="Center"></Setter> 
</Style> 

embargo, he visto tantas artículos WPF que sugieren que sólo se puede hacer esto mediante la adición de TextWrapping o HorizontalAlignment en cada columna de cuadrícula de datos individual :

<toolkit:DataGridTextColumn Binding="{Binding Path=TaxAmount}"> 
    <toolkit:DataGridTextColumn.HeaderTemplate > 
     <DataTemplate> 
      <TextBlock Text="Tax Amount" Width="90" TextWrapping="Wrap" HorizontalAlignment="Center"/> 
     </DataTemplate> 
    </toolkit:DataGridTextColumn.HeaderTemplate> 
</toolkit:DataGridTextColumn> 
+0

Guau, le diste una buena respuesta a una pregunta de hace un año una hora antes de buscarla. +1 – Quartermeister

+1

No sé por qué, pero probé todo tu código pero ¿No centró el texto? – Elisabeth

+1

Solución Fanastic. Solo para su información, tenía un ColumnHeaderStyle existente definido en ResourceDictionary y simplemente pegué el bloque Setter Property -to- Setter en eso. Funcionó como un amuleto y alteró la apariencia de todas las cuadrículas de datos que tenían ese estilo, sin requerir una referencia a las primitivas o al WPF Toolkit. – SQLServerSteve

30

O no se moleste con las primitivas en el archivo App.xaml y haga lo siguiente (mis objetos):

<DataGrid Name="WBdataGrid" AutoGenerateColumns="False" ColumnHeaderHeight="50" > 
    <DataGrid.ColumnHeaderStyle> 
     <Style TargetType="DataGridColumnHeader"> 
      <Setter Property="ContentTemplate"> 
       <Setter.Value> 
        <DataTemplate> 
         <TextBlock TextWrapping="Wrap" Text="{Binding}"></TextBlock> 
        </DataTemplate> 
       </Setter.Value> 
      </Setter> 
     </Style> 
    </DataGrid.ColumnHeaderStyle> 
    <DataGrid.Columns> ... 
+1

¡Esta es una solución mucho mejor que la respuesta aceptada! – Kevek

8

que añade &#x0a; al texto de cabecera donde quiero que el texto se ajuste. Esto es útil cuando no necesita vincular el texto del encabezado a algo

<DataGridTextColumn x:Name="cAccountNumber" Header="Account&#x0a; Number" Width="80" Binding="{Binding Path=AccountNumber}" /> 
Cuestiones relacionadas