正在做打印的一个功能,但是有一列内容特别长,用普通的列展示的话特别难看而且不会自动换行,没办法就用模版列放了一个textblock 并设置了TextWrapping='Wrap' 但是这个datagrid需要在后台自动生成,最后经过实验终于弄好了,分享出来大家一起讨论;
internal static DataGridTemplateColumn GetGridViewColumn(string header, string element) { DataGridTemplateColumn tempCol = new DataGridTemplateColumn(); tempCol.Header = header; StringBuilder cellTemp = new StringBuilder(); cellTemp.Append("<DataTemplate "); cellTemp.Append(" xmlns='http://schemas.microsoft.com/winfx/2006/xaml/presentation'"); cellTemp.Append(" xmlns:x='http://schemas.microsoft.com/winfx/2006/xaml'"); cellTemp.Append(" xmlns:grid='clr-namespace:Telerik.Windows.Controls;assembly=Telerik.Windows.Controls.GridView'>"); cellTemp.Append(element); cellTemp.Append("</DataTemplate>"); tempCol.CellTemplate = (DataTemplate)XamlReader.Load(cellTemp.ToString()); return tempCol; }
调运:
if (dg.Columns[i].Header.ToString() == "故障处理经过") { datagrid.Columns.Add(GetGridViewColumn("故障处理经过", "<TextBlock Text='{Binding 故障处理经过}' TextWrapping='Wrap' HorizontalAlignment='Stretch' width='180' />")); } else if (dg.Columns[i].Header.ToString() == "原因分析") { datagrid.Columns.Add(GetGridViewColumn("原因分析", "<TextBlock Text='{Binding 原因分析}' TextWrapping='Wrap' HorizontalAlignment='Stretch' width='180' />")); }