示例#1
0
        /// <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();
                }
            }
        }