【问题标题】:Setting TextTrimming (CharacterEllipsis) in DataGrid's Cell在 DataGrid 的单元格中设置 TextTrimming (CharacterEllipsis)
【发布时间】:2012-08-04 17:15:15
【问题描述】:

我想将 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 列。感谢您的宝贵时间;)

【问题讨论】:

    标签: wpf wpfdatagrid


    【解决方案1】:

    我最终得到了以下解决方案(更像是一种解决方法,但效果很好):

    1) 我为有问题的样式分配了一个 x:Key 并将其作为 CellStyle 应用到所有 DataGridTextColumns,只要它们不这样做,它们的内容就应该被修剪和省略不适合

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

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

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

    【讨论】:

      猜你喜欢
      • 2012-08-31
      • 2011-09-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-03-07
      • 1970-01-01
      • 2010-11-23
      • 1970-01-01
      相关资源
      最近更新 更多