gpt4 book ai didi

c# - 使用 WPF 4.5 通用弱事件管理器处理路由事件?

转载 作者:太空宇宙 更新时间:2023-11-03 10:58:32 24 4
gpt4 key购买 nike

我想知道如何将“Handled”RoutedEvents 的订阅转换为 WeakEventManager?

UIElement 具有以下订阅“Handled”RoutedEvents 的方法:UIElement.AddHandler(RoutedEvent routedEvent, Delegate handler, bool handledEventsToo)

那么如何将它转换为通用 Wea​​kEventManager 形式呢?

最佳答案

您应该能够按照创建自定义事件管理器的指南进行操作 from MSDN ,并像这样实现 StartListeningStopListening:

protected override void StartListening(object source) {
var sourceElement = (UIElement)source;
sourceElement.AddHandler(RoutedEvent, OnRoutedEvent, true);
}

protected override void StopListening(object source) {
var sourceElement = (UIElement)source;
sourceElement.RemoveHandler(RoutedEvent, OnRoutedEvent, true);
}

我认为为此使用通用的 WeakEventManager 没有多大意义,因为它使用事件名称并调用 Type.GetEvent在内部,当您使用 RoutedEvents 和 AddHandler 而不是“真实”事件时,这根本没有用。但是,您可以编写自己的通用基类来使用 RoutedEvents。


就我个人而言,我使用自己的基于Dustin Campbell's WeakEventHandler 的弱事件解决方案。 .它的好处是,它不是在内部管理添加和删除,而是为您提供原始委托(delegate)的“弱”版本,您可以自由传递……因此在添加时无需自定义弱事件管理器的实现以不同的方式委托(delegate),因为两种情况下的用法相同:

uielement.MouseDown += weakMouseDownHandler;

uielement.AddHandler(UIElement.MouseDownEvent, weakMouseDownHandler, true);

关于c# - 使用 WPF 4.5 通用弱事件管理器处理路由事件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18565396/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com