我想将TextTrimming属性(CharacterEllipsis)应用于WPF DataGrid单元格中的文本。
我在this answer(下面的代码)中应用了自定义DataGridCell模板,它运行良好,除了图片中第一个的超链接列外,现在它们都是空的。
<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>
我可以看到可视树中两种列类型的区别:
但不明白我如何使用此信息将TextTrimming应用于TextBlock的两种类型的列。谢谢你的时间;)
答案 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中所述)。这看起来有点矫枉过正,但我看不出渲染性能有多大差异,现在可以按预期修剪超链接。