我有一个使用 LayoutUpdated-events 并需要注册它们的应用程序。这是问题,我在执行 WeakEventManager 期间遇到了问题
internal class WeakLayoutUpdatedManager : WeakEventManager
{
[..]
private void OnLayoutUpdated(object sender, EventArgs e)
{
// NOTE: received sender is always null (by design of LayoutUpdated)
base.DeliverEvent(sender, e);
}
}
这就是发生的事情:
- 我们总是收到 null 作为发件人(根据 LayoutUpdated 的设计)
- 该 null 被传递到 DeliverEvent
- DeliverEvent 无法查找正确的 ListenerList,因为它需要一个 sender != null 作为键
WPF中的失败查找:WeakEventManager // DeliverEvent // 行:359
object sourceKey = (sender != null) ? sender : StaticSource;
list = (ListenerList)Table[this, sourceKey];
我的问题是:有没有办法弱注册到 LayoutUpdated 事件?
我对 sender-parameter 不感兴趣,所以 LayoutUpdated 总是提供 null 对我来说是可以的(我使用常规“+=”的实际实现有效)。但是 WeakEventManager 基类依赖 sender-parameter 来跟踪 ListenerList。