Как я могу передать метод щелчка мышью в качестве параметра? - PullRequest
2 голосов
/ 10 марта 2010

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

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

Какого типа здесь должен быть параметр 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);
}

Ответы [ 2 ]

1 голос
/ 10 марта 2010

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

1 голос
/ 10 марта 2010

Передайте как RoutedEventHandler, например:

public static void FillMenuWithPages(this StackPanel spMenu, string menuIdCode,
            PagingManager pagingManager, RoutedEventHandler mouseClickHandler)
...