Это прекрасно работает:Почему аргумент «Делегат» принимает только делегат RoutedEventHandler?
EventManager.RegisterClassHandler(typeof(DataGrid),
DataGrid.SelectionChangedEvent,
new RoutedEventHandler(ScrollToSelectedItem));
void ScrollToSelectedItem(object sender, RoutedEventArgs e)
компилируется, но дает во время выполнения исключение: типа Handler является несовпадающими:
EventManager.RegisterClassHandler(typeof(DataGrid),
DataGrid.SelectionChangedEvent,
new Action<object, RoutedEventArgs>(
(object sender, RoutedEventArgs e1) =>
ScrollToSelectedItem(sender, e1, false)));
void ScrollToSelectedItem(object sender, RoutedEventArgs e, bool jump)
Третий параметр RegisterClassHandler
объявлен Delegate handler
.
Неявно предполагается, что обработчик является не только делегатом, но и делегатом RoutedEventHandler
?
Тогда почему у RegisterClassHandler
не более точная подпись?
EDIT только что обнаружил, что я могу решить эту проблему с помощью:
RoutedEventHandler htrue = (o, ea) => ScrollToSelectedItem(o, ea, true);
RoutedEventHandler hfalse = (o, ea) => ScrollToSelectedItem(o, ea, false);
void ScrollToSelectedItem(object sender, RoutedEventArgs e, bool jump)
EventManager.RegisterClassHandler(typeof(DataGrid),
DataGrid.SelectionChangedEvent, hfalse);
Можно ли (неявно) преобразовать 'Action
@Gerard Нет, это не так. – Servy
@Servy, 'public static implicit operator RoutedEventHandler (Action