DataGrid中,只要不設置DataGrid的寬度和列寬度,或者將寬度設置為Auto,那麼表格就會根據內容自動調整寬度,以顯示所有內容。但如果是ListView,按以上方法設置,卻達不到列寬自動調整的效果, 列寬在控制項第一次載入的時候已經確定,之後不會隨著某列數據長度的增加和減少而改變列寬。找了很 ...
DataGrid中,只要不設置DataGrid的寬度和列寬度,或者將寬度設置為Auto,那麼表格就會根據內容自動調整寬度,以顯示所有內容。但如果是ListView,按以上方法設置,卻達不到列寬自動調整的效果, 列寬在控制項第一次載入的時候已經確定,之後不會隨著某列數據長度的增加和減少而改變列寬。找了很多方法,感覺下麵的方法比較簡單和實用,在每次增加或者刪除數據集合的時候,將 GridViewColumn 的 Width 屬性 設置為 無效值,觸發其自適應效果。
原貼地址:https://blog.csdn.net/djc11282/article/details/42261677
原貼代碼:
1 GridView gv = lvTrans.View as GridView; 2 if (gv != null) 3 { 4 foreach (GridViewColumn gvc in gv.Columns) 5 { 6 gvc.Width = gvc.ActualWidth; 7 gvc.Width = Double.NaN; 8 } 9 }C# Code
因為從 C# 7.0 開始,is 語句支持模式匹配,可執行簡單的類型計算和轉換。使用類型模式執行模式匹配時,is 會測試表達式是否可轉換為指定類型,如果可以,則將其轉換為該類型的一個變數。代碼使用 is 語句更為簡潔,同時對列寬直接賦值應該更簡捷,所以我略作了修改:
1 //使listview根據內容自動調整寬度 2 if (lvAcct.View is GridView gv) 3 { 4 foreach (GridViewColumn gvc in gv.Columns) 5 { 6 gvc.Width = 100; 7 gvc.Width = Double.NaN; 8 } 9 }C# Code ListView中的列寬要先賦值,再設置為無效值,直接設置為無效值不會起作用。究竟是什麼道理,我沒有弄明白。