Как я могу обработать свое пользовательское событие в style->eventsetter?
Я сделал пользовательский обработчик событий в моем usercontrol:
public partial class FooControl
{
public event RoutedEventHandler AddFoo;
private void AddFoo_Click(object sender, RoutedEventArgs e)
{
if (AddFoo != null)
AddFoo(this, new RoutedEventArgs());
}
}
когда я хочу обработать событие, как это, все работает нормально:
<controls:FooControl AddFoo="FooControl_OnAddFoo"/>
Я хотел сделать это так, но потом что-то не получилось, и я не знаю почему.
<Style TargetType="controls:FooControl">
<EventSetter Event="AddFoo" Handler="Event_AddFoo"/>
</Style>
Дополнительная информация: редактор подчеркивает AddFoo в EventSetter и говорит
- событие "AddFoo" не является перенаправленным событием
- поле дескриптора перенаправленного события "AddFooEvent" отсутствует
- выдает исключение: выдается исключение: "System.Windows.Markup.XamlParseException" в PresentationFramework.dll
- внутреннее исключение говорит, что значение не должно быть нулевым
РЕДАКТИРОВАТЬ:
public static readonly RoutedEvent AddEvent =
EventManager.RegisterRoutedEvent
("AddEvent", RoutingStrategy.Bubble,
typeof(RoutedEventHandler), typeof(FooControl));
public event RoutedEventHandler AddFoo
{
add { AddHandler(AddEvent, value); }
remove { RemoveHandler(AddEvent, value); }
}
void RaiseAddEvent()
{
RoutedEventArgs newEventArgs = new RoutedEventArgs(FooControl.AddEvent);
RaiseEvent(newEventArgs);
}
private void AddFoo_Click(object sender, RoutedEventArgs e)
{
RaiseAddEvent();
}
1 ответ
Решение
Ваше событие должно быть перенаправленным.
Согласно вашему коду, регистрация перенаправленного события неверна.
Вот правильный:
// 'AddEvent' is the name of the property that holds the routed event ID
public static readonly RoutedEvent AddEvent = EventManager.RegisterRoutedEvent
("Add", // the event name is 'Add'
RoutingStrategy.Bubble,
typeof(RoutedEventHandler),
typeof(FooControl));
// The event name is 'Add'
public event RoutedEventHandler Add
{
add { AddHandler(AddEvent, value); }
remove { RemoveHandler(AddEvent, value); }
}
Пожалуйста, обратите внимание на название мероприятия. Не путайте это со свойством идентификатора события. Это важно.