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

我在这个答案(下面的代码)中应用了自定义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>
Run Code Online (Sandbox Code Playgroud)
我可以看到可视化树中两种列类型的差异:

但不明白我如何使用此信息将TextTrimming应用于TextBlock的两种类型的列.谢谢你的时间 ;)
我最终得到了以下解决方案(更像是一种解决方法,但它工作正常):
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的答案中所述).这可能看起来有点矫枉过正,但我看不出渲染性能有多大差异,现在可以按预期修剪超链接.
| 归档时间: |
|
| 查看次数: |
7904 次 |
| 最近记录: |