如何将属性附加到自定义事件?

Hed*_*dge 3 .net c# wpf visual-studio

我有一个自定义事件,并希望附加一个属性(一个字符串就可以了).我需要在代码中更改什么:

    public static readonly RoutedEvent ModelClickEvent = EventManager.RegisterRoutedEvent(
        "ModelClick", RoutingStrategy.Bubble, typeof(RoutedEventHandler), typeof(InfoBox));

    // Provide CLR accessors for the event
    public event RoutedEventHandler FadeIn
    {
        add { AddHandler(ModelClickEvent, value); }
        remove { RemoveHandler(ModelClickEvent, value); }
    }

    // This method raises the Tap event
    void RaiseTapEvent()
    {
        RoutedEventArgs newEventArgs = new RoutedEventArgs(InfoBox.FadeInEvent); 
        RaiseEvent(newEventArgs);
    }
Run Code Online (Sandbox Code Playgroud)

ASa*_*nch 8

首先,您需要创建一个包含新属性的新RoutedEventArgs派生类.就像是:

public class ModelClickEventArgs : RoutedEventArgs
{
    public string MyString { get; set; }
    public ModelClickEventArgs() : base() { }
    public ModelClickEventArgs(RoutedEvent routedEvent) : base(routedEvent) { }
    public ModelClickEventArgs(RoutedEvent routedEvent, object source) : base(routedEvent, source) { }
}
Run Code Online (Sandbox Code Playgroud)

然后,您将必须创建一个使用新事件args的委托:

public delegate void ModelClickEventHandler(object sender, ModelClickEventArgs e);
Run Code Online (Sandbox Code Playgroud)

之后,您必须对上面的代码进行更改,以便它使用这些新对象:

public static readonly RoutedEvent ModelClickEvent = EventManager.RegisterRoutedEvent(
        "ModelClick", RoutingStrategy.Bubble, typeof(ModelClickEventHandler), typeof(Window));

// Provide CLR accessors for the event
public event ModelClickEventHandler FadeIn
{
    add { AddHandler(ModelClickEvent, value); }
    remove { RemoveHandler(ModelClickEvent, value); }
}

// This method raises the Tap event
void RaiseTapEvent()
{
    ModelClickEventArgs newEventArgs = new ModelClickEventArgs();
    newEventArgs.MyString = "some string";
    RaiseEvent(newEventArgs);
}
Run Code Online (Sandbox Code Playgroud)