在DataGrid的Cell中设置TextTrimming(CharacterEllipsis)

Paw*_*wan 6 wpf wpfdatagrid

我想将TextTrimming属性(CharacterEllipsis)应用于WPF DataGrid单元格中的文本.

未设置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>
Run Code Online (Sandbox Code Playgroud)

我可以看到可视化树中两种列类型的差异: 可视树中的数据网格行(未应用自定义模板时)

但不明白我如何使用此信息将TextTrimming应用于TextBlock的两种类型的列.谢谢你的时间 ;)

Paw*_*wan 7

我最终得到了以下解决方案(更像是一种解决方法,但它工作正常):

1)我为所讨论的样式分配了一个x:Key并将其作为CellStyle应用于所有DataGridTextColumns,这些DataGridTextColumns应该在它们不适合时修剪和省略其内容

2)要在DataGridHyperlinkColumns中应用省略号修剪,在App.xaml中我添加了以下样式:

<Style TargetType="{x:Type TextBlock}">
    <Setter Property="TextTrimming" Value="CharacterEllipsis"></Setter>
</Style>
Run Code Online (Sandbox Code Playgroud)

这将适用于所有隐式生成的TextBlocks(如CodeNaked的答案中所述).这可能看起来有点矫枉过正,但我​​看不出渲染性能有多大差异,现在可以按预期修剪超链接.