2012-08-07 38 views
5

WPF DataGridセルのテキストにTextTrimmingプロパティ(CharacterEllipsis)を適用したいと思います。DataGridのセルでTextTrimming(CharacterEllipsis)を設定する

DataGrid cells without TextTrimming set

私はthis answer(以下コード)のようにカスタムDataGridCellテンプレートを適用し、それが空になっている写真の最初のもののようなハイパーリンク列)を除いて、うまく動作します。

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> 

私はビジュアルツリー内の両方の列タイプの違いを見ることができます:

Datagrid row in visual tree (when no custom template is applied)

が、私は両方ののTextBlockの列にTextTrimmingを適用するには、この情報を使用する方法を理解していませんタイプ。お時間をありがとう;)

答えて

6

)私は最終的に多くの問題を回避するように、以下の溶液(になってしまったが、それは正常に動作します:

1)私はX割り当て:問題のスタイルにキーをし、 App.xamlで、その内容は、トリミングやDataGridHyperlinkColumnsにトリミング省略記号を適用するには)彼らは

2に合わない時はいつでもellipsisized持っている必要があり、すべてのDataGridTextColumnsにCellStyleとしてそれを適用し、私は次のスタイルを追加しました:

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

暗黙的に生成されたすべてのTextBlockに適用されます(CodeNaked's answerで説明)。これはちょっと残酷に思えるかもしれませんが、レンダリングのパフォーマンスに大きな違いは見られず、ハイパーリンクは現在期待どおりに整えられています。

関連する問題