如何在DataGridTextColumn中实现文本换行

4

首先,我使用WPF和DataGrid是因为我想要列标题。然而,如果有一种方法可以实现这一点并且仍然具有列标题,我不会坚持使用这个解决方案。

现在,我进行了一些广泛的搜索,并尝试了通过谷歌找到的各种解决方案,但是这些解决方案似乎都无法解决我的问题,而且进一步的问题也无法翻译。

* 我尝试了以下方法:

<Style TargetType="DataGridCell" x:Key="LeftColumnStyle">
    <Setter Property="FrameworkElement.HorizontalAlignment" Value="Left"/>
    <Setter Property="FontSize" Value="14"/>
    <Setter Property="TextBlock.TextWrapping" Value="Wrap" />
</Style>

<DataGridTextColumn Header="Comments" HeaderStyle="{StaticResource LeftHeaderStyle}" CellStyle="{StaticResource LeftColumnStyle}" Binding="{Binding Path=Comments, UpdateSourceTrigger=PropertyChanged}" Width="250" />    

* 但是包装并没有起作用 -- 因此我尝试了以下方法:

<DataGridTextColumn Header="Comments" HeaderStyle="{StaticResource LeftHeaderStyle}" Binding="{Binding Path=Comments, UpdateSourceTrigger=PropertyChanged}" Width="250" >
    <DataGridTextColumn.ElementStyle>
        <Style TargetType="{x:Type TextBlock}">
            <Setter Property="TextBlock.TextWrapping" Value="Wrap" />
            <Setter Property="TextBlock.TextAlignment" Value="Left"/>
            <Setter Property="TextBlock.FontSize" Value="14"/>
            <Setter Property="TextBlock.Width" Value="250"/>
        </Style>
    </DataGridTextColumn.ElementStyle>
</DataGridTextColumn>

* 该列换行但不自动调整高度,因此似乎只是截断文本。

我尝试将Textblock直接放在DataGridTextColumn中,并将数据绑定到Textblock上,但DataGridTextColumn会出错,显示它不支持直接内容。

总之,我试图换行那些文本将超过预设单元格宽度的列(我有超过一个这样的列——描述和注释以及其他5个单元格不换行,因为它们从未超过预设单元格宽度),然而我不能使高度相应地调整。如果需要更多高度,则每行中的所有列都可以扩展高度,就像在Excel电子表格中发生的情况一样,但是我甚至无法在换行时使特定列扩展。提前感谢您的帮助。


好了,发现我的错误了——第二种方法可以工作,我只是将行高设置在 DataGrid 层面上,将其移除后,它现在可以按预期展开高度了。因此有一个稍微不同的问题——是否可以在前者中成功地通过样式来实现后者呢?也就是说,我想通过样式来完成它,但上述样式无法换行文本。 - Dennis O J
正确控制DataGridTextColumn中的文本块的方法是通过像您所做的那样使用ElementStyle。您可以将第二个片段中的样式添加到资源中,并在每个列上使用Dynamic/StaticResource。这将与第一个片段的工作量相同。 - XAMeLi
1个回答

15

今天早些时候我也有同样的问题,并通过以下方法解决:

<DataGridTextColumn.ElementStyle>
    <Style>
        <Setter Property="TextBlock.TextWrapping" Value="Wrap" />
    </Style>
</DataGridTextColumn.ElementStyle>

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接