6

TextTrimmingプロパティ(CharacterEllipsis)をWPFDataGridセルのテキストに適用したいと思います。

TextTrimmingが設定されていないDataGridセル

この回答(以下のコード)のようにカスタムDataGridCellテンプレートを適用しましたが、現在は空になっている(図の最初のようなハイパーリンク列を除いて)正常に機能します。

TextTrimmingはテキスト列に設定されていますが、ハイパーリング列の内容がありません

<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>

ビジュアルツリーの両方の列タイプの違いを確認できます。 ビジュアルツリーのデータグリッド行(カスタムテンプレートが適用されていない場合)

しかし、この情報を使用して、両方のタイプのTextBlockの列にTextTrimmingを適用する方法がわかりません。御時間ありがとうございます ;)

4

1 に答える 1

7

私は最終的に次の解決策に行き着きました(回避策のようなものですが、正常に機能します):

1)問題のスタイルにx:Keyを割り当て、それをCellStyleとしてすべてのDataGridTextColumnsに適用しました。これらの列は、収まらない場合は常にコンテンツをトリミングして省略します。

2)DataGridHyperlinkColumnsで省略記号のトリミングを適用するために、App.xamlで次のスタイルを追加しました。

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

これは、暗黙的に生成されたすべてのTextBlockに適用されます(CodeNakedの回答で説明されています)。これは少しやり過ぎに思えるかもしれませんが、レンダリングパフォーマンスに大きな違いは見られず、ハイパーリンクは期待どおりにトリミングされています。

于 2012-08-16T13:54:52.290 に答える