2012-08-07 6 views
5

Chciałbym zastosować właściwość TextTrimming (CharacterEllipsis) do tekstu w komórkach DataGrid WPF.Ustawianie funkcji TextTrimming (CharacterEllipsis) w komórce DataGrid

DataGrid cells without TextTrimming set

Zgłosiłem własnego szablonu DataGridCell jak w this answer (kod poniżej) i to działa dobrze, z wyjątkiem kolumn hiperłącze jak pierwszy na zdjęciu), które teraz są puste.

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> 

widzę różnicy w obu typach kolumn w drzewie wizualne: Datagrid row in visual tree (when no custom template is applied)

ale nie rozumiem, w jaki sposób można wykorzystać te informacje, aby zastosować TextTrimming do kolumn textblock w obu rodzaj. Dzięki za poświęcony czas;)

Odpowiedz

6

I wreszcie skończył z następującym roztworze (więcej jak obejść ten problem, ale to działa dobrze):

1) I przypisany x: Key do stylu w pytaniu i zastosowano ją jako CellStyle do wszystkich DataGridTextColumns że powinien mieć ich zawartość przycięte i ellipsisized gdy nie pasują

2) stosuje wielokropek kadrowania w DataGridHyperlinkColumns w App.xaml dodałem następujące style:

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

, które będą stosowane do wszystkich niejawnie wygenerowanych bloków tekstowych (jak opisano w CodeNaked's answer). To może wydawać się nieco przesadzone, ale nie widzę dużej różnicy w renderowaniu wydajności, a hiperlinki są teraz przycinane zgodnie z oczekiwaniami.