WPF не удалось создать обработчик событий из текста при использовании пользовательского элемента управления пользовательского события - PullRequest
0 голосов
/ 29 мая 2019

Я создал пользовательский элемент управления в 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. Мне кажется странным, что я получаю сообщение об ошибке только в этой конкретной строке, так как до реализации этого пользовательского события и обработчика событий другие обработчики событий работали нормально, и они были идентичны в сигнатуре метода (кроме, конечно, в имени).

Как мне попытаться отладить это?

...