2014-11-15 27 views
0

我在Loaded事件上附加事件「DataGridColumnHeader_MouseRightButtonDown」以打開上下文菜單以顯示列名稱。它工作正常。如何在代碼後面的自定義DataGrid中的DataGridColumnHeader上附加事件?

private void dtaGrd_Loaded(object sender, RoutedEventArgs e) 
{ 
    columnHeaders = TreeHelper.GetVisualChildCollection<DataGridColumnHeader>(this); 
    foreach (DataGridColumnHeader columnHeader in columnHeaders) 
    { 
    columnHeader.MouseRightButtonDown += DataGridColumnHeader_MouseRightButtonDown; 
    } 
} 

但是,當我取消選中列,然後「名稱」列的可見性將被摺疊。再次,我檢查該列以將可見性設置爲「可見」,然後「DataGridColumnHeader_MouseRightButtonDown」事件不起作用。

是我的實現是錯誤的或DataGridColumnHeader將創建新的實例時,可見性是變化?

是的,我發現當DataGridColumnHeader的可見性發生變化時,它的Loaded事件也會引發火災。所以,我們必須在DataGridColumnHeader的加載事件上綁定處理程序。

哪個DataGrid事件讓我知道DataGridColumnHeader是加載的? 或我必須附加DataGridColumnHeader加載事件?

+0

我發現當DataGridColumnHeader的可見性發生變化時,它的Loaded事件也會觸發。所以,我們必須在DataGridColumnHeader的加載事件上綁定處理程序。 –

回答

1

首先,您應該知道,每次更改任何控件的可見性時,都會執行其「加載」事件。

在你的情況下,你可以通過從DataGrid的可視化集合中查找來爲數據網格的列標題提供處理程序。

所以,一旦你從Visible翻轉列VisibilityCollapsed它會從數據網格卸載列,並再次,當你把它Visible它加載與提供給頭默認樣式。

這裏來是你的處理程序綁定到該列的主要問題頭不會被人發現作爲列了Reset

我的意見是給試圖自定義命令或您對管理安裝/拆卸處理,而可見光。

謝謝:)

相關問題