標籤:
wpf 的datagrid的行高 要麼是Auto,要麼是定值:但會帶來麻煩就是每行行高都一樣。
當需要按內容(主要是wrap 換行的textbox或textblock)來動態調整行高的時候,需要用到dataGrid的LoadingRow 事件。
參考兩個網頁:
http://stackoverflow.com/questions/9264398/how-to-calculate-wpf-textblock-width-for-its-known-font-size-and-characters
http://www.codeproject.com/Articles/5521/Advanced-DataGrid-sizing
代碼注釋詳細,不做細談。
代碼如下:
private void dgList_LoadingRow(object sender, DataGridRowEventArgs e) { e.Row.Height = 30; //粗略計算行高。為了更好的顯示效果 ContentInfo info = (ContentInfo)e.Row.DataContext; if (info != null) { //計算最大長度的文本 string maxLengthString = info.name1.Length > info.name2.Length ? info.name1: info.name2; //擷取換行文本的文字框寬度,即template裡面的textbox或textblock的實際寬度 double textBoxWidth = (this.ActualWidth - 300) / 2; var formattedText = new FormattedText( maxLengthString , CultureInfo.CurrentUICulture, FlowDirection.LeftToRight, new Typeface(new FontFamily("微軟雅黑"), FontStyles.Normal, FontWeights.Normal, FontStretches.Normal), 12, Brushes.Black); double calculateHeight = formattedText.Height * (formattedText.Width / textBoxWidth); e.Row.Height = 30 > calculateHeight ? 30 : calculateHeight; } }
效果(每行行高都不一樣,自適應了):
轉載請註明出處,謝謝。 有問題請聯絡:[email protected]
wpf datagrid row height 行高自動計算使每行行高自適應文本