2012-08-07 19 views
5

Vorrei applicare la proprietà TextTrimming (CharacterEllipsis) al testo nelle celle WPF DataGrid.Impostazione TextTrimming (CharacterEllipsis) nella cella DataGrid

DataGrid cells without TextTrimming set

ho applicato modello DataGridCell personalizzato come in this answer (codice qui sotto) e funziona bene, tranne che per le colonne collegamento ipertestuale come il primo nella foto), che ora sono vuoti.

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> 

riesco a vedere la differenza in entrambi i tipi di colonna nella struttura ad albero visuale: Datagrid row in visual tree (when no custom template is applied)

ma non capisco come posso utilizzare queste informazioni per applicare TextTrimming alle colonne di entrambi di TextBlock genere. Grazie per il tempo;)

risposta

6

ho finalmente finito con la soluzione seguente (più come una soluzione alternativa, ma funziona bene):

1) ho assegnato un x: Key lo stile in questione e applicata come un CellStyle a tutti DataGridTextColumns che dovrebbe avere il loro contenuto tagliati e ellipsisized ogni volta che non si adattano

2) per applicare i puntini di sospensione rifilatura in DataGridHyperlinkColumns, in App.xaml ho aggiunto il seguente stile:

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

applicabile a tutti i blocchi di testo generati implicitamente (come descritto in CodeNaked's answer). Questo potrebbe sembrare un po 'eccessivo, ma non riesco a vedere molta differenza nel rendering delle prestazioni e gli Hyperlink vengono ora ritagliati come previsto.

Problemi correlati