/// <summary> /// ValidateContextMenu event allows to modify or hide any query builder context menu. /// </summary> private void QBuilder_OnValidateContextMenu(object sender, QueryElement queryelement, ICustomContextMenu menu) { if (ValidateContextMenu.IsChecked != true) { return; } BoxLogEvents.Text = "OnValidateContextMenu" + Environment.NewLine + BoxLogEvents.Text; // Insert custom menu item to the top of any context menu menu.InsertItem(0, "Custom Item 1", CustomItem1EventHandler); menu.InsertSeparator(1); // separator if (queryelement is Link) // Link context menu { // Add another item in the Link's menu menu.AddSeparator(); // separator menu.AddItem("Custom Item 2", CustomItem2EventHandler); } else if (queryelement is DataSourceObject) // Datasource context menu { } else if (queryelement is UnionSubQuery) { if (sender is IDesignPaneControl) // diagram pane context menu { } else if (sender is NavigationPopupBase) { } } else if (queryelement is QueryColumnListItem) // QueryColumnListControl context menu { var queryColumnListItem = (QueryColumnListItem)queryelement; var queryColumnListHitTestInfo = QBuilder.QueryColumnListControl.HitTest(Mouse .GetPosition((UIElement)QBuilder.QueryColumnListControl).ToCPoint()); switch (queryColumnListHitTestInfo.ItemProperty) { case QueryColumnListItemProperty.Expression: menu.AddSeparator(); var menuItemExpression = menu.AddSubMenu("Expression property"); menuItemExpression.AddItem("Show full SQL", ExpressionColumnEventHandler, false, true, null, queryColumnListItem.Expression.GetSQL()); break; case QueryColumnListItemProperty.Selected: case QueryColumnListItemProperty.Alias: case QueryColumnListItemProperty.SortType: case QueryColumnListItemProperty.SortOrder: case QueryColumnListItemProperty.Aggregate: case QueryColumnListItemProperty.Grouping: case QueryColumnListItemProperty.ConditionType: case QueryColumnListItemProperty.Condition: case QueryColumnListItemProperty.Custom: menu.AddSeparator(); menu.AddItem("Get info of current cell", (o, args) => { var message = $"Item property [{queryColumnListHitTestInfo.ItemProperty}]\nItem index [{queryColumnListHitTestInfo.ItemIndex}]\nCondition index [{queryColumnListHitTestInfo.ConditionIndex}]\nIs now here [{queryColumnListHitTestInfo.IsNowhere}]"; MessageBox.Show(this, message, "Information"); }); break; default: throw new ArgumentOutOfRangeException(); } } }