我有一个DataGrid与DataGridTextColumn,我已将TextBlock.TextWrapping设置为NoWrap。如果我尝试显示一个真正非常长的行,超过10000个字符的长度,显示只是像TextBlock.MaxWidth那样切割。问题在于它会删除任何后续换行并有效地停止显示任何其他内容。如何修复以使MaxWidth更长(我已将其设置为最大可能)或至少显示换行符以便显示以下行。
<DataGrid Grid.Row="0" Name="LogDataGrid" Margin="0,25,0,0" AutoGenerateColumns="False" VirtualizingPanel.ScrollUnit="Pixel" IsReadOnly="True" FontWeight="Normal" CanUserSortColumns="False" IsTabStop="True" HeadersVisibility="Column">
<DataGrid.RowStyle>
<Style TargetType="DataGridRow">
<Setter Property="Foreground" Value="{Binding Color}"/>
</Style>
</DataGrid.RowStyle>
<DataGrid.CellStyle>
<Style TargetType="DataGridCell">
<Setter Property="IsTabStop" Value="False"></Setter>
</Style>
</DataGrid.CellStyle>
<DataGrid.Columns>
<DataGridTextColumn Header="DateTime" Binding="{Binding DateTime, StringFormat=\{0:yyyy-MM-dd HH:mm:ss\}}" Width="Auto" />
<DataGridTextColumn Header="Version" Binding="{Binding Version}" Width="60"/>
<DataGridTextColumn Header="Text" Binding="{Binding Text}" Width="{Binding Path=WrapText, Mode=OneWay, Source={x:Static p:Settings.Default}, Converter={StaticResource BooleanDataGridLengthConverter}}">
<DataGridTextColumn.ElementStyle>
<Style>
<Setter Property="TextBlock.TextWrapping" Value="{Binding Path=WrapText, Mode=OneWay, Source={x:Static p:Settings.Default}, Converter={StaticResource BooleanTextWrappingConverter}}" />
</Style>
</DataGridTextColumn.ElementStyle>
</DataGridTextColumn>
</DataGrid.Columns>
</DataGrid>
我更喜欢使用DataGridTemplateColumn,因为您可以更好地控制数据,例如能够设置工具提示。确保内部文本块具有TextWrapping =“Wrap”,并且模板列的宽度是您需要的大小。还要确保数据网格上没有固定的rowheight。
<DataGridTemplateColumn Header="Subject" Width="*">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<TextBlock Text="{Binding Subject}" ToolTip="{Binding Subject}" TextWrapping="Wrap"/>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>