2009-12-10 34 views

回答

1

我必須這樣做,但對於silverlight網格。我能得到的最好的結果就是處理Grid.LayoutUpdated事件,並枚舉列來獲取它們的寬度。我甚至無法綁定到Silverlight網格中的列寬屬性,因爲它不是依賴屬性,WPF網格很可能完全相同。

編輯: 你可以做的是通過檢查WPF網格的源代碼,並自己添加一個ColumnResized事件。這並不理想,因爲每次安裝DevExpress更新時都必須重新整合代碼,然後重新構建網格。您還需要小心如何執行此操作,例如,您需要確定確定列調整大小何時完成的最佳方法,以便您不會持續觸發事件。或者你可以看看更全面的(更成熟的)網格?

+0

我試過了,此事件每5秒automaticaly,將我的應用程序seriuosly減慢提高。所以我認爲我們必須尋找更好的方式或事件。 – Vytas999 2009-12-10 10:03:56

+0

或者,也許我們必須通過某種方式來指示,當用戶更新佈局以及何時引發自動調整。 – Vytas999 2009-12-10 10:08:39

+0

LostMouseCapture - 如果沒有人會回答或提出更好的方法,效果會更好一些,但這些都是我最好的方式。 – Vytas999 2009-12-10 11:52:05

0

DataGridColumnHeader公開一個SizeChanged事件,該事件將SizeChangedEventArgs對象傳遞給您,其中顯示了大量有用的大小信息!

2

您可以通過事件View.LostFocus存儲列寬度:

DevExpress.Xpf.Grid.GridControl GRC =新DevExpress.Xpf.Grid.GridControl(); grc.View.LostFocus + = View_LostFocus;

而且隨着處理器:

void View_LostFocus(object sender, RoutedEventArgs e) 
    { 
     TableView tv = sender as TableView; 
     GridColumn[] gcs = tv.VisibleColumns.ToArray(); 
     foreach (GridColumn gc in gcs) 
     { 
      if (gc.ActualHeaderWidth != gc.Width) 
      { 
       double newWidth = gc.ActualHeaderWidth; //Do something with new width 
      } 
     } 
    }