我有一个自定义事件,想要附加一个属性(一个字符串就可以了)。 我需要在代码中更改什么:
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);
}
答案 0 :(得分: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) { }
}
然后,您将必须创建一个使用新事件args的委托:
public delegate void ModelClickEventHandler(object sender, ModelClickEventArgs e);
之后,您必须对上面的代码进行更改,以便它使用这些新对象:
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);
}
答案 1 :(得分:2)
如果您想要将属性添加到处理程序接收的RoutedEventArgs对象,那么您所要做的就是声明一个继承自RoutedEventArgs且具有属性的类(-y / -ies) )你想补充一下。
它看起来像下面这样:
public class ModelRoutedEventArgs : RoutedEventArgs
{
public string ExtraMessage { get; set; }
public ModelRoutedEventArgs(RoutedEvent routedEvent, string message) : base(routedEvent)
{
ExtraMessage = message;
}
// anything else you'd like to add can go here
}
或者,不是添加构造函数重载,而是可以实例化自定义RoutedEventArgs
类并在将属性传递给RaiseEvent()
调用之前设置该属性。