1 Answer, 1 is accepted
0
                                
                                                    Irwing
                                                    
                                            
    Top achievements
    
            
                
                Rank 1
            
    
                                                
                                                answered on 10 Jan 2012, 12:08 PM
                                            
                                        I wrote a code like this based on your trial example, does it works?
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
                                        using System;using System.Linq;using System.Windows;using System.Windows.Data;using System.ComponentModel;using Telerik.Windows.Controls;using Telerik.Windows.Controls.GridView;using Telerik.Windows;using Telerik.Windows.Data;namespace esAccessCenterControls{    public class GridViewHeaderMenu    {        private RadGridView grid = null;        static ColumnGroupDescriptor g = new ColumnGroupDescriptor();        public GridViewHeaderMenu(RadGridView grid)        {            this.grid = grid;        }        public static readonly DependencyProperty IsEnabledProperty            = DependencyProperty.RegisterAttached("IsEnabled", typeof(bool), typeof(GridViewHeaderMenu),                new PropertyMetadata(new PropertyChangedCallback(OnIsEnabledPropertyChanged)));        public static void SetIsEnabled(DependencyObject dependencyObject, bool enabled)        {            dependencyObject.SetValue(IsEnabledProperty, enabled);        }        public static bool GetIsEnabled(DependencyObject dependencyObject)        {            return (bool) dependencyObject.GetValue(IsEnabledProperty);        }        public static void SetGroupDescriptor(ref ColumnGroupDescriptor groupDescriptor)        {            g = groupDescriptor;        }        private static void OnIsEnabledPropertyChanged(DependencyObject dependencyObject, DependencyPropertyChangedEventArgs e)        {            RadGridView grid = dependencyObject as RadGridView;            if (grid != null)            {                if ((bool) e.NewValue)                {                    // Create new GridViewHeaderMenu and attach RowLoaded event.                    GridViewHeaderMenu menu = new GridViewHeaderMenu(grid);                    menu.Attach();                }            }        }        private void Attach()        {            if (grid != null)            {                // create menu                RadContextMenu contextMenu = new RadContextMenu();                // set menu Theme                StyleManager.SetTheme(contextMenu, StyleManager.GetTheme(grid));                contextMenu.Opened += OnMenuOpened;                contextMenu.ItemClick += OnMenuItemClick;                RadContextMenu.SetContextMenu(grid, contextMenu);            }        }        void OnMenuOpened(object sender, RoutedEventArgs e)        {            RadContextMenu menu = (RadContextMenu) sender;            GridViewHeaderCell cell = menu.GetClickedElement<GridViewHeaderCell>();            if (cell != null)            {                menu.Items.Clear();                RadMenuItem item = new RadMenuItem();                item.Header = "Funções:";                menu.Items.Add(item);                RadMenuItem subMenu1 = new RadMenuItem();                subMenu1.Header = "Média total";                subMenu1.IsCheckable = true;                subMenu1.IsChecked = false;                item.Items.Add(subMenu1);                RadMenuItem subMenu2 = new RadMenuItem();                subMenu2.Header = "Soma total";                subMenu2.IsCheckable = true;                subMenu2.IsChecked = false;                item.Items.Add(subMenu2);                RadMenuItem subMenu3 = new RadMenuItem();                subMenu3.Header = "Contar entradas";                subMenu3.IsCheckable = true;                subMenu3.IsChecked = false;                item.Items.Add(subMenu3);                RadMenuItem subMenu4 = new RadMenuItem();                subMenu4.Header = "Maior valor";                subMenu4.IsCheckable = true;                subMenu4.IsChecked = false;                item.Items.Add(subMenu4);                RadMenuItem subMenu5 = new RadMenuItem();                subMenu5.Header = "Menor valor";                subMenu5.IsCheckable = true;                subMenu5.IsChecked = false;                item.Items.Add(subMenu5);                RadMenuItem subMenu6 = new RadMenuItem();                subMenu5.Header = "Limpar funções";                subMenu5.IsCheckable = true;                subMenu5.IsChecked = false;                item.Items.Add(subMenu5);                item = new RadMenuItem();                item.Header = "Exibir Colunas:";                menu.Items.Add(item);                // create menu items                foreach (GridViewColumn column in grid.Columns)                {                    RadMenuItem subMenu = new RadMenuItem();                    subMenu.Header = column.Header;                    subMenu.IsCheckable = true;                    subMenu.IsChecked = true;                    Binding isCheckedBinding = new Binding("IsVisible");                    isCheckedBinding.Mode = BindingMode.TwoWay;                    isCheckedBinding.Source = column;                    // bind IsChecked menu item property to IsVisible column property                    subMenu.SetBinding(RadMenuItem.IsCheckedProperty, isCheckedBinding);                    item.Items.Add(subMenu);                }            }            else            {                menu.IsOpen = false;            }        }        void OnMenuItemClick(object sender, RoutedEventArgs e)        {            RadContextMenu menu = (RadContextMenu) sender;            GridViewHeaderCell cell = menu.GetClickedElement<GridViewHeaderCell>();            RadMenuItem clickedItem = ((RadRoutedEventArgs) e).OriginalSource as RadMenuItem;            GridViewColumn column = cell.Column;            if (clickedItem.Parent is RadMenuItem && ((RadMenuItem)clickedItem.Parent).Header == "Exibir Colunas:")                return;            string header = Convert.ToString(clickedItem.Header);            using (grid.DeferRefresh())            {                ColumnSortDescriptor sd = (from d in grid.SortDescriptors.OfType<ColumnSortDescriptor>()                                           where object.Equals(d.Column, column)                                           select d).FirstOrDefault();                if (header.Contains("Média Total"))                {                    if (clickedItem.IsChecked)                    {                        AverageFunction a = new AverageFunction();                        a.Caption = "Média de " + column.Header + ": ";                        a.SourceField = column.UniqueName;                        g.Column.AggregateFunctions.Add(a);                        clickedItem.IsChecked = false;                    }                    else                    {                        foreach (AggregateFunction func in g.Column.AggregateFunctions)                        {                            if (func.Caption.Substring(0, 5) == header.Substring(0, 5))                            {                                g.Column.AggregateFunctions.Remove(func);                                clickedItem.IsChecked = true;                                break;                            }                        }                    }                }                else if (header.Contains("Soma total"))                {                    if (clickedItem.IsChecked)                    {                        SumFunction s = new SumFunction();                        s.Caption = "Soma de " + column.Header + ": ";                        s.SourceField = column.UniqueName;                        g.Column.AggregateFunctions.Add(s);                        clickedItem.IsChecked = false;                    }                    else                    {                        foreach (AggregateFunction func in g.Column.AggregateFunctions)                        {                            if (func.Caption.Substring(0, 4) == header.Substring(0, 4))                            {                                g.Column.AggregateFunctions.Remove(func);                                clickedItem.IsChecked = true;                                break;                            }                        }                    }                }                else if (header.Contains("Contar entradas"))                {                    if (clickedItem.IsChecked)                    {                        CountFunction c = new CountFunction();                        c.Caption = "Quantidade de " + column.Header + ": ";                        g.Column.AggregateFunctions.Add(c);                        clickedItem.IsChecked = false;                    }                    else                    {                        foreach (AggregateFunction func in g.Column.AggregateFunctions)                        {                            if (func.Caption.Substring(0, 6) == header.Substring(0, 6))                            {                                g.Column.AggregateFunctions.Remove(func);                                clickedItem.IsChecked = true;                                break;                            }                        }                    }                }                else if (header.Contains("Maior valor"))                {                    if (clickedItem.IsChecked)                    {                        MaxFunction m = new MaxFunction();                        m.Caption = "Maior valor de " + column.Header + ": ";                        g.Column.AggregateFunctions.Add(m);                        clickedItem.IsChecked = false;                    }                    else                    {                        foreach (AggregateFunction func in g.Column.AggregateFunctions)                        {                            if (func.Caption.Substring(0, 5) == header.Substring(0, 5))                            {                                g.Column.AggregateFunctions.Remove(func);                                clickedItem.IsChecked = true;                                break;                            }                        }                    }                }                else if (header.Contains("Menor valor"))                {                    if (clickedItem.IsChecked)                    {                        MinFunction m = new MinFunction();                        m.Caption = "Menor valor de " + column.Header + ": ";                        g.Column.AggregateFunctions.Add(m);                        clickedItem.IsChecked = false;                    }                    else                    {                        foreach (AggregateFunction func in g.Column.AggregateFunctions)                        {                            if (func.Caption.Substring(0, 5) == header.Substring(0, 5))                            {                                g.Column.AggregateFunctions.Remove(func);                                clickedItem.IsChecked = true;                                break;                            }                        }                    }                }                else if (header.Contains("Limpar funções"))                {                    g.Column.AggregateFunctions.Clear();                }            }        }    }}