2012-08-07 11 views
5

WPF DataGrid hücrelerindeki metne TextTrimming özelliğini (CharacterEllipsis) uygulamak istiyorum. DataGrid's Cell'de TextTrimming (CharacterEllipsis) Ayarı

DataGrid cells without TextTrimming set

ben this answer (aşağıdaki kodu) gibi özel DataGridCell şablon uygulanmış ve şimdi boş olan resimde ilki) gibi Köprü sütunları hariç, iyi çalışıyor.

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> 

Görsel ağacında hem sütun tiplerinde farkı görebilirsiniz: Datagrid row in visual tree (when no custom template is applied)

ama hem textBlock en sütunlara TextTrimming uygulamak için bu bilgileri kullanabilirsiniz anlamıyorum yazın. Zaman ayırdığınız için teşekkürler;)

cevap

6

nihayet daha geçici bir çözüm gibi aşağıdaki solüsyon (ile sona erdi ama iyi çalışıyor):

1) Bir x atanan: Söz konusu stiline Anahtar ve App.xamlyılında, bunların içeriğini kesilmiş ve DataGridHyperlinkColumns içinde kırparak üç nokta uygulamak için) onlar

2 uymaz zaman ellipsisized olması gereken tüm DataGridTextColumns bir CellStyle olarak uygulanan ben şu tarz ekledi:

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

, tüm örtük olarak oluşturulmuş TextBlock'lara uygulanacaktır (CodeNaked's answer'da açıklandığı gibi). Bu biraz aşırı olabilir, ancak performansın gerçekleştirilmesinde fazla bir fark göremiyorum ve Köprüler artık beklendiği gibi kırpılmış durumda.