2015-06-19 135 views
0

我試圖將個性化和單獨的ContextMenus添加到項目中的每個列標題,以便當用戶右鍵單擊標題時,會出現一個與該標題將出現,允許他們過濾數據。WPF:以編程方式將ContextMenu添加到DataGrid列標題

一些捕獲:我正在開發的項目需要爲.NET 4.0開發,因此我無法訪問在.NET 4.5中引入的DataGridColumnHeader類。此外,所有這些都需要以編程方式完成,不允許使用XML,因爲所有列數據都是在運行時確定的。

我發現了一個similar Stack question,其中這是使用XML完成的,並且我已經成功地將它轉換爲XML,但我是WPF的新手,並且無法以編程方式重現它。

我已經粘貼了一些C#代碼,我認爲安裝應該發生。

/// <summary> 
    /// Function that adds all of the columns for the default setup 
    /// </summary> 
    public void MakeAllColumns() 
    { 
     for (int i = 0; i < AllColumnDisplayNames.Length; i++) 
     { 
      DataGridTextColumn col = new DataGridTextColumn(); 
      col.Header = AllColumnDisplayNames[i]; 
      col.Binding = new Binding(AllColumnBindings[i]); 
      canGrid.Columns.Add(col); 

      // code for addding context menus will most likely go here 


     } 
    } 

回答

0

DataGridColumns不是FrameworkElements,因此它們沒有ContextMenu。既然你想這樣做,所有在代碼中指定列的數據模板可能是一個痛苦(恕我直言)。您可以嘗試傳遞一個FrameworkElement作爲該列的Header對象,並在該框架元素上設置上下文菜單。

例子:

//... 

    DataGridTextColumn col = new DataGridTextColumn(); 

    //... 

    TextBlock txt = new TextBlock() { Text = AllColumnDisplayNames[i] }; 
    txt.ContextMenu = new ContextMenu(); // Build your context menu here. 

    col.Header = txt; 

    //... 
+0

非常感謝!這增加了我需要的功能。 –

相關問題