Я создал пользовательский элемент управления в XAML и хотел, чтобы он вызывал пользовательское событие при изменении его значения. Я основывался на: Microsoft Docs Example и придумал следующий код:
KnobControl.xaml.cs:
public static readonly RoutedEvent ValueChangedEvent = EventManager.RegisterRoutedEvent("ValueChanged", RoutingStrategy.Bubble, typeof(RoutedEventHandler), typeof(KnobControl));
//Events
public event RoutedEventHandler ValueChanged
{
add { AddHandler(ValueChangedEvent, value); }
remove { RemoveHandler(ValueChangedEvent, value); }
}
ChannelStrip.xaml (xaml с элементом управления в нем):
<KnobControlNamespace:KnobControl x:Name="ChannelPan" arcEndAngle="145" arcStartAngle="-145" Title="Pan" Unit="" Maximum="50" LabelFontSize="34" Step="1" Power="1" Foreground="{DynamicResource Text}" Grid.Row="2" Margin="0,2" Minimum="-50" ValueChanged="ChannelPan_ValueChanged"/>
И, наконец, ChannelStrip.xaml.cs (здесь должен быть обработчик событий):
public void ChannelPan_ValueChanged(object sender, RoutedEventArgs e)
{
RaiseEvent(new RoutedEventArgs(PanEvent));
}
Когда я запускаю это, я получаю: 'Failed to create a 'ValueChanged' from the text 'ChannelPan_ValueChanged'
, а также внутреннее исключение: ArgumentException: Cannot bind to the target method because its signature or security transparency is not compatible with that of the delegate type.
Я потратил некоторое время на проверку этого примера, но я не мог достаточно узнать об ошибке, чтобы иметь возможность отладить это сам, так как я все еще довольно плохо знаком с использованием событий и WPF. Мне кажется странным, что я получаю сообщение об ошибке только в этой конкретной строке, так как до реализации этого пользовательского события и обработчика событий другие обработчики событий работали нормально, и они были идентичны в сигнатуре метода (кроме, конечно, в имени).
Как мне попытаться отладить это?