在DataGrid的Cell中设置TextTrimming(CharacterEllipsis)

时间:2012-08-07 16:26:21

标签: wpf wpfdatagrid

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

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)

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

1 个答案:

答案 0 :(得分:6)

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

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

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

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

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