private void groupBox_AttachHeaderUI()
        {
            try
            {
                groupBox = WPFDataGridConfigurationBehaviorFinder.LastVisualAncestorOfType <GroupBox>(dataGrid);

                if (groupBox == null)
                {
                    try { groupBox = (GroupBox)dataGrid.Parent; }
                    catch { }
                }

                if (groupBox == null)
                {
                    return;
                }
                ///
                /// Get the groupBox header's stackpanel child
                /// and the foreground color from it's first label/textblock
                ///
                StackPanel headerPanel = groupBox.Header as StackPanel;
                if (headerPanel == null)
                {
                    return;
                }

                Label     lblLabel = headerPanel.Children[0] as Label;
                TextBlock txtLabel = headerPanel.Children[0] as TextBlock;
                if (lblLabel == null && txtLabel == null)
                {
                    return;
                }
                else if (lblLabel != null)
                {
                    labelFore   = lblLabel.Foreground;
                    labelHeight = lblLabel.Height;
                }
                else
                {
                    labelFore   = txtLabel.Foreground;
                    labelHeight = txtLabel.Height;
                }
                ///
                /// Add lblViewingCols
                ///
                lblViewingCols = new Label()
                {
                    Margin = new Thickness(12, 0, 0, 0), FontSize = 10, Foreground = labelFore
                };
                headerPanel.Children.Add(lblViewingCols);
            }
            catch (Exception ex)
            { StdErrOut(ex, MethodInfo.GetCurrentMethod().Name); }
        }
        private void contextMenu_BuildMenu(bool pbRebuild = true)
        {
            //try
            //{            // Remove any old column name items
            for (int i = theContextMenu.Items.Count - 1; i > 0; i--)
            {
                if (((MenuItem)theContextMenu.Items[i]).FontWeight != FontWeights.Bold)
                {
                    theContextMenu.Items.Remove(theContextMenu.Items[i]);
                }
            }

            nBaseItems = theContextMenu.Items.Count;

            // Attach the context menu to the DataGrid ColumnHeaders
            var headersPresenter = WPFDataGridConfigurationBehaviorFinder.FindChild <DataGridColumnHeadersPresenter>(dataGrid);

            if (headersPresenter == null)
            {
                return; // dirty hack to fix a creahs when loading first different pages than the one containing this element
            }
            ContextMenuService.SetContextMenu(headersPresenter, theContextMenu);

            if (VisibleColumns == null)
            {
                throw (new SettingsPropertyNotFoundException("User's VisibleColumns setting not found."));
            }

            // Get the current column ordering from user.config

            if (DisplayIndexes == null)
            {
                throw (new SettingsPropertyNotFoundException("User's DisplayIndexes setting not found."));
            }

            AllColumnDisplayIndexes = DisplayIndexes;
            string[] colIndexes = AllColumnDisplayIndexes.Split(new char[] { ';' }, StringSplitOptions.RemoveEmptyEntries);

            System.Linq.IOrderedEnumerable <DataGridColumn> dataGridColumns = dataGrid.Columns.OrderBy(x => x.DisplayIndex);

            // Sort the columns in display index order so menu header order matchs display column order
            if (pbRebuild == false)
            {
                // Initially the datagrid column order is such that display indexes are the same as the col indexes
                if (colIndexes.Length > 0)
                {
                    dataGridColumns = dataGrid.Columns.OrderBy(x => Convert.ToInt16(colIndexes[x.DisplayIndex]));
                }
            }

            if (mnuAlpha.IsChecked)
            {
                dataGridColumns = dataGrid.Columns.OrderBy(x => x.Header.ToString());
            }

            System.Linq.IOrderedEnumerable <DataGridColumn> filteredDataGridColumns = null;
            if (wordFilter.Length > 1)
            {
                filteredDataGridColumns = dataGrid.Columns
                                          .Where(x => x.Header.ToString().Contains(wordFilter) == true).OrderBy(x => x.Header.ToString());
            }
            if (filteredDataGridColumns != null)
            {
                dataGridColumns = filteredDataGridColumns;
            }

            if (wordFilter.Length == 1)
            {
                dataGridColumns = dataGrid.Columns
                                  .Where(x => x.Header.ToString().ToUpper().StartsWith(wordFilter.ToUpper()) == true).OrderBy(x => x.Header.ToString());
            }

            AllColumnsHeaders = "";
            foreach (DataGridColumn col in dataGridColumns)
            {
                // All column name to a list of all column headers for later use.
                AllColumnsHeaders = String.Format("{0};{1}", col.Header.ToString().Replace("\n", " ").Replace("\r", " "), AllColumnsHeaders);

                // Add new menu item in display order.
                contextMenu_AddNewMenuItem(col);
            }

            string sTemp = VisibleColumns;

            VisibleColumns = null;
            VisibleColumns = sTemp;
            //}
            //catch (Exception ex)
            //{ StdErrOut(ex, MethodInfo.GetCurrentMethod().Name); }
        }