Создайте подкласс RoutedEventArgs для хранения ваших дополнительных данных и используйте EventHandler<T>
с вашим классом args. Это будет преобразовано в RoutedEventHandler, а дополнительные данные будут доступны в ваших обработчиках.
Вы можете создать универсальный класс RoutedEventArgs, который содержит один параметр любого типа, но создание нового класса обычно облегчает чтение и модификацию кода для включения большего количества параметров в будущем.
public class FooEventArgs
: RoutedEventArgs
{
// Declare additional data to pass here
public string Data { get; set; }
}
public class FooControl
: UserControl
{
public static readonly RoutedEvent FooEvent =
EventManager.RegisterRoutedEvent("Foo", RoutingStrategy.Bubble,
typeof(EventHandler<FooEventArgs>), typeof(FooControl));
public event EventHandler<FooEventArgs> Foo
{
add { AddHandler(FooEvent, value); }
remove { RemoveHandler(FooEvent, value); }
}
protected void OnFoo()
{
base.RaiseEvent(new FooEventArgs()
{
RoutedEvent = FooEvent,
// Supply the data here
Data = "data",
});
}
}