防止RegisterClassHandler回调被执行

时间:2017-12-13 14:23:31

标签: c# wpf

我正在使用第三方产品,其中视图具有路由事件的类处理程序。类处理程序包含不需要的代码。理想情况下,我想完全删除对RegisterClassHandler的调用,但遗憾的是我没有源代码。我已经读过没有办法取消注册类处理程序。有没有其他方法可以阻止回调被执行?

static ThirdPartyView
{
    EventManager.RegisterClassHandler(
        typeof(ThirdPartyView),
        Control.PreviewLostKeyboardFocusEvent,
        new KeyboardFocusChangedEventHandler(OnPreviousLostKeyboardFocus),
        true);
}

先决条件

  • 不,我无法修改源代码。
  • 不,我不能继承视图类和覆盖方法。
  • 不,我无法拦截此视图的创建。
  • 不,我不能改变强名单集合中的位。

如何删除/停用/停用此类处理程序?

1 个答案:

答案 0 :(得分:0)

如果您拥有的库不是netcore库,那么您可以尝试使用IL编辑器,例如https://sourceforge.net/projects/dile/https://github.com/0xd4d/dnSpyhttp://reflexil.net/ 当您发现RegisterClassHandler调用时,我猜您可以尝试将new KeyboardFocusChangedEventHandler(OnPreviousLostKeyboardFocus)替换为null。如果它不起作用,您可以尝试擦除整个方法调用。

如果它是netcore项目,您仍然可以编辑IL代码,但我不确定那些执行此操作且具有GUI的工具是否能够跟上发布的新netcore版本