Как я могу передать метод щелчка мышью в качестве параметра?

Я хочу создать расширение method, которое заполняет панель стека кнопками.

Для этого мне нужно передать обработчик мыши.

Какого типа здесь должен быть параметр mouseClickHandler?

Я знаю, что это что-то вроде этого, но все они не работают:

  • delegate
  • Func<object, RoutedEventArgs>
  • Action<>

Код:

public static void FillMenuWithPages(this StackPanel spMenu, string menuIdCode, 
            PagingManager pagingManager, ??????? mouseClickHandler)
{
    var menuPageItems = PageItems.GetPageItemsWithMenu(menuIdCode);
    spMenu.Children.Clear();
    foreach (var pageItem in menuPageItems)
    {
        var button = new Button();
        button.Content = pageItem.Title;
        button.Margin = new Thickness { Right = 3 };
        button.Tag = pageItem.IdCode;
        button.Cursor = Cursors.Hand;
        button.Click += new RoutedEventHandler(mouseClickHandler);
        if (pageItem.IdCode == pagingManager.CurrentPageItemIdCode)
            button.IsEnabled = false;
        spMenu.Children.Add(button);
    }
}

Я бы назвал это так:

QuickMenu.FillMenuWithPages("quick", PagingManager, Menu_Button_Click);

и это обработчик щелчка мыши:

void Menu_Button_Click(object sender, RoutedEventArgs e)
{
    string pageItemIdCode = ((FrameworkElement)sender).Tag.ToString();
    PagingManager.SwitchPage(pageItemIdCode);
}

person Edward Tanguay    schedule 10.03.2010    source источник


Ответы (2)


Передайте его как RoutedEventHandler вот так:

public static void FillMenuWithPages(this StackPanel spMenu, string menuIdCode,
            PagingManager pagingManager, RoutedEventHandler mouseClickHandler)
person Adam Maras    schedule 10.03.2010

Это зависит от того, является ли это приложением WPF или Winforms. Для WPF это будет RoutedEventHandler (как указано в ButtonBase.Click документации). Для winforms это EventHandler (как показано в Control.Click документации).

person Fredrik Mörk    schedule 10.03.2010