Обработчик кнопок в коде C # WPF - PullRequest
1 голос
/ 18 июля 2010

Я создал несколько кнопок в коде, как это.

if (infoLoader.categoriesLoaded)
        {
            sideBarButtons = new Button[infoLoader.categoriesLength];
            for (int i = 0; i < sideBarButtons.Length; i++)
            {
                sideBarButtons[i] = new Button();
                sideBarButtons[i].Content = infoLoader.categories[i].name;
                Canvas.SetLeft(sideBarButtons[i], 30);
                Canvas.SetTop(sideBarButtons[i], 110 + (40 * i));
                sideBarButtons[i].Click += new EventHandler(this.SideButton_Click);
                leftSideBar.Children.Add(sideBarButtons[i]);

            }
        }

С помощью функции обработки событий кнопки, подобной этой:

private void SideButton_Click(object sender, EventArgs e)
    {
        // Uhh
        Console.WriteLine("The Button has been clicked.");
        mainText.Text = infoLoader.games[0].id.ToString() + ", " + infoLoader.games[0].name + ": " + infoLoader.games[0].description;
        MainLaunchBtn.Content = "Launch " + infoLoader.games[0].name;
    }

И это дает мне ошибку:

Ошибка 1 Нет перегрузки для 'SideButton_Click' соответствует делегату 'System.EventHandler'

Я немного смущен тем, что мне здесь не хватает, и любая помощь будет принята с благодарностью. Спасибо,

Andy

Ответы [ 2 ]

2 голосов
/ 18 июля 2010

Событие Button.Click в WPF (унаследованное от ButtonBase) не относится к типу EventHandler - оно RoutedEventHandler.Я несколько удивлен тем, какое именно сообщение об ошибке вы получаете, но вы должны иметь возможность изменить свой код на:

sideBarButtons[i].Click += new RoutedEventHandler(this.SideButton_Click);

или более просто:

sideBarButtons[i].Click += this.SideButton_Click;

Делегирование дисперсиипозволит преобразовать существующую сигнатуру метода в RoutedEventHandler, даже если второй параметр имеет тип EventArgs вместо RoutedEventArgs.

Вам следует убедиться, что вы получили право usingДирективы - убедитесь, что вы действительно создаете кнопки WPF вместо кнопок WinForms.

0 голосов
/ 18 июля 2010

Я думаю, вам нужен метод с такой подписью:

    private void SideButton_Click(object sender, RoutedEventArgs e)
    {

    }

and you can add the handler like this:

sideBarButtons[i].Click += SideButton_Click;
...