Dot-Net

WPF 數據網格和動態列寬

  • September 17, 2012

我們有一個自定義的 DataGrid 控制項,可以動態生成由 XML 結構確定的列。

在創建每一列時,我們給它一個星號單位類型,因為我們要確保 DataGrid 中永遠不會有任何水平滾動。

           DataGridTextColumn column = new DataGridTextColumn();
           column.Width = new DataGridLength(entity.DisplaySize, DataGridLengthUnitType.Star);

但是,我們注意到,當 DataGrid 被渲染時,它會以賦予列的最小尺寸進行渲染,然後一旦 DataGrid 完全渲染,它會調整列的大小以適當地適應 DataGrid。這會導致閃爍效果。

有沒有人有任何可能的解決方案?也許如何在後台渲染 DataGrid,然後在列完成後顯示?還是有其他想法?

不幸的是,這是正常行為。它與控制項的呈現方式有關。在 WPF 中,您有一層又一層的控制項,而 DataGrid 在完成呈現之前無法知道哪些類型的控制項。

因此,第一個佈局傳遞創建了控制項,但隨後必須通過第二個傳遞來測量這些控制項的大小。一旦它知道控制項有多大,它就可以開始調整列的大小。

DataGrid 是 WPF 的高度可配置和動態佈局系統不起作用的場景的一個很好的例子。要獲得您習慣的那種性能,您需要使用非 WPF 網格,它能夠更好地預測其自身的層次結構,從而執行這些類型的測量,而無需預渲染所有內容。WPF 中存在此類控制項,但您必須找到它們。

這是來自 xceed 的一個:http://xceed.com/Grid_WPF_Intro.html?gclid= CNKE8rOBtrICFQfonAodHQ8AEA

這是 Telerik 的一個:http ://www.telerik.com/products/wpf/gridview.aspx

(由於需要平衡靈活性和性能,以及現代數據網格中預期的大量功能,這個控制項長期以來一直被認為是控制項開發的頂峰。好的數據網格非常難以建構。在 Excel 中,Microsoft 建構了一個整個應用程序基本上圍繞著一個美化的數據網格。所有這些都是說,你可能不會免費找到你要找的東西。)

看到這個問題:WPF DataGrid Vs Windows Forms DataGridView

引用自:https://stackoverflow.com/questions/12428774