2

在我的一些冒烟测试中,我使用Mono Cecil来解析我的程序集的操作码。然后我执行一些操作来验证代码质量等。但是,我并不真正关心设计器中生成的代码,因为我对此无能为力,所以我将排除该InitializeComponent方法。这适用于 WinForms,但似乎不适用于 xaml。换句话说,我仍在处理 xaml 中的指令(即正在订阅的事件)。我知道 xaml 被“编译”成 baml 而不是 IL,但 Mono Cecil 显然仍然能够从 baml 获取操作码)。

我在这里这里读到,在 xaml 中,InitializeComponent调用Application.LoadComponent方法,所以我也尝试排除它,但我仍在处理 xaml 指令。我专门检查事件处理程序订阅。

我的问题:InitializeComponent除了or之外,在编译 xaml 时是否还调用了其他“幕后”方法LoadComponent?换句话说,我如何区分来自代码隐藏 (xaml.cs) 与 xaml 的指令?

4

1 回答 1

1

所以,通过 MSDN 挖掘,我发现了这个小宝石。

显然,IComponentConnector 既可以处理 InitializeComponent ,也可以处理 Connect(处理事件订阅)。所以有一点关于 WPF 与 Winforms 的教训,事件是在 InitializeComponent 中设置的。

所以,排除的方法是:

System.Windows.Markup.IComponentConnector.Connect();

于 2012-10-23T14:33:25.043 回答