2012-08-07 7 views
5

Me gustaría aplicar la propiedad TextTrimming (CharacterEllipsis) al texto en las celdas de WPF DataGrid.Configuración de TextTrimming (CharacterEllipsis) en la celda de DataGrid

DataGrid cells without TextTrimming set

que aplica la plantilla personalizada DataGridCell como en this answer (código de abajo) y funciona bien, a excepción de las columnas de hipervínculo como el primero en la imagen), que ahora están vacías.

TextTrimming set on text columns, but hyperling column contents missing

<Style TargetType="DataGridCell"> 
    <Setter Property="Template"> 
     <Setter.Value> 
      <ControlTemplate TargetType="{x:Type DataGridCell}"> 
       <Border Padding="3" BorderBrush="{TemplateBinding BorderBrush}" BorderThickness="{TemplateBinding BorderThickness}" Background="{TemplateBinding Background}" SnapsToDevicePixels="True"> 
        <ContentPresenter SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}"> 
         <ContentPresenter.ContentTemplate> 
          <DataTemplate> 
           <TextBlock TextTrimming="CharacterEllipsis" Text="{Binding Text}"/> 
          </DataTemplate> 
         </ContentPresenter.ContentTemplate> 
        </ContentPresenter> 
       </Border> 
      </ControlTemplate> 
     </Setter.Value> 
    </Setter> 
</Style> 

puedo ver la diferencia en los dos tipos de columna en árbol visual: Datagrid row in visual tree (when no custom template is applied)

pero no entienden cómo puedo usar esta información para aplicar TextTrimming a columnas de tanto de TextBlock tipo. Gracias por su tiempo;)

Respuesta

6

finalmente terminó con la siguiente solución (más como una solución, pero funciona muy bien):

1) que asigna un x: Key al estilo en cuestión y aplicado como un CellStyle a todos DataGridTextColumns que debe tener su contenido recortadas y ellipsisized siempre que no se ajustan

2) para aplicar el recorte de puntos suspensivos en DataGridHyperlinkColumns, en App.xaml añadí el siguiente estilo:

<Style TargetType="{x:Type TextBlock}"> 
    <Setter Property="TextTrimming" Value="CharacterEllipsis"></Setter> 
</Style> 

que se aplicará a todos los TextBlocks generados implícitamente (como se describe en CodeNaked's answer). Esto puede parecer un poco exagerado, pero no veo mucha diferencia en el rendimiento de la representación y los hipervínculos ahora se recortan como se esperaba.

Cuestiones relacionadas