WPF C # Динамическая маршрутизация событий в программно созданном элементе - PullRequest
0 голосов
/ 09 января 2019

В отдельном классе я предоставил несколько методов для динамического создания элемента. Динамическое создание этого элемента - не проблема, а маршрутизация события.

Мои мысли, где этот "путь" (например, namespace.class.method) передается через параметр в методе создания.

Но до сих пор я не мог прикрепить такой прослушиватель событий. Я провел много исследований с использованием Google и StackOverflow, но безуспешно.

Выкладываю исходный код метода ниже. Код в разделе if для EventHandler не пустой был моей последней попыткой. Возможно ли, что мои мысли будут работать, или это возможно только для добавления обработчиков событий в основной класс, который инициализирует приложение.

static public WrapPanel comboBox(string Name, List<string> Items, bool MultiSelection = false, string EventHandler="",string Label="", int Width = 0)
    {

        WrapPanel lPanel = new WrapPanel();
        lPanel.Name = "stPanel_" + Name;

        if (Label != "")
        {
            Label lLabel = new Label();
            lLabel.Content = Label;
            lPanel.Children.Add(lLabel);
            if (Width != 0)
            {
                lPanel.Width = Width;
            }
        }

        dynamic lComboBox;

        if (MultiSelection)
        {
            lComboBox = new ComboBoxAdv();
            lComboBox.AllowMultiSelect = true;

        }
             else lComboBox = new ComboBox();

        lComboBox.Name = Name;
        foreach (string Item in Items) lComboBox.Items.Add(Item);

        lPanel.Children.Add(lComboBox);

        ComboBox dkaf = new ComboBox();


        if (EventHandler != "")
        {
           string lClass = "";
           string lMethod = EventHandler.Split('.').Last();
           for (int lCounter = 0; lCounter < EventHandler.Split('.').Length - 1; lCounter++)
                lClass += EventHandler.Split('.')[lCounter] + ".";
            lClass = lClass.Substring(0, lClass.Length - 1);


            object dynamicObject;
            Type objectType = Type.GetType(lClass);
            dynamicObject = Activator.CreateInstance(objectType);
            System.Reflection.MethodInfo method = objectType.GetMethod(lMethod);
            //method.Invoke(dynamicObject, new object[] { });

            lComboBox.Click += new RoutedEventHandler(method);

        }

        return lPanel;
    }

С наилучшими пожеланиями Chris

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...