wpf 监听退出事件_c# – WPF – 声明自定义路由事件并监听它

本文介绍了在WPF中创建并监听自定义路由事件的问题。作者在用户控件中声明了一个冒泡路由事件,并尝试从同一控件内部监听它。通过示例代码展示了事件声明、事件监听以及按钮触发事件的过程,发现用户控件无法监听自己的事件,提出了疑问。
摘要由CSDN通过智能技术生成

简而言之:我想声明一个自定义路由事件,同时从声明它的同一个用户控件中监听它.

我想要实现的是拥有一个为某个任务提供请求的用户控件,所以我想到了这个场景:

>用户控件类声明自定义路由事件

>用户控件类通过AddHandler(…)监听自己的自定义路由事件

然后:

>可视化树中的一些随机项使用RaiseEvent(…)来…嗯,举起事件.

>树中的用户控件实例为请求提供服务.

它似乎不起作用.它与用户控件声明并引发事件的通常情况有点不同,我知道,所以我做了一些测试.

如何创建自定义路由事件似乎很清楚,这不是我第一次这样做.我创建了一个示例用户控件,这是它背后的代码:

public partial class FuffaControl : UserControl

{

public static readonly RoutedEvent FuffaEvent = EventManager.RegisterRoutedEvent("Fuffa", RoutingStrategy.Bubble, typeof(FuffaEventHandler), typeof(FuffaControl));

// Provide CLR accessors for the event

public event FuffaEventHandler Fuffa

{

add { AddHandler(FuffaEvent, value); }

remove { RemoveHandler(FuffaEvent, value); }

}

public FuffaControl()

{

InitializeComponent();

}

}

到现在为止还挺好.然后,出于测试目的,我已经声明了一个带有自定义控件的窗口和一个按钮.这是窗口的内容:

在后面的代码中,我使用AddHandler来监听事件,并在点击按钮时引发事件:

public MainWindow()

{

InitializeComponent();

this.AddHandler(FuffaControl.FuffaEvent, new FuffaEventHandler(OnFuffaEvent));

}

private void Button_Click(object sender, RoutedEventArgs e)

{

RoutedEventArgs newEventArgs = new RoutedEventArgs(FuffaControl.FuffaEvent);

RaiseEvent(newEventArgs);

}

private void OnFuffaEvent(object sender, RoutedEventArgs e)

{

}

有用.它没有多大意义(我的意思是,它不是那么有用),但我只是用它来测试事件本身是否正常工作.好吧,除非C#正在做一些奇怪的事情并切割一些角落,但乍一看,在我看来按钮正在提升一个自定义事件,事件在树上传播(毕竟这是一个冒泡的事件),并且窗口收到它.

所以,接下来我接受AddHandler(…)调用和处理函数并将它们移动到用户控件;现在不是窗口谁听Raisevent(…),但用户控制自己.如果它有效,我有子元素引发事件,并且父用户控件管理它:

public partial class FuffaControl : UserControl

{

public static readonly RoutedEvent FuffaEvent = EventManager.RegisterRoutedEvent("Fuffa", RoutingStrategy.Bubble, typeof(FuffaEventHandler), typeof(FuffaControl));

// Provide CLR accessors for the event

public event FuffaEventHandler Fuffa

{

add { AddHandler(FuffaEvent, value); }

remove { RemoveHandler(FuffaEvent, value); }

}

public FuffaControl()

{

InitializeComponent();

this.AddHandler(FuffaControl.FuffaEvent, new FuffaEventHandler(OnFuffaEvent));

}

private void OnFuffaEvent(object sender, RoutedEventArgs e)

{

}

}

Nnnnnope.它不起作用.为什么?这有什么问题?为什么用户控件无法收听自己的事件?

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值