我的WPF用户控件的公共接口包含自动生成的InitializeComponent方法(包含在部分类中)。对我来说,这是一个惊喜,因为我期望这样的内部工具是私有的。

有什么方法可以从用户控件公共界面中删除InitializeComponent?

最佳答案

InitializeComponent是在接口System.Windows.Markup.IComponentConnector上定义的方法,用于加载组件的已编译页面。

请参阅以下MSDN摘录的IComponentConnector,其中包含更多信息:

Baml2006ReaderInitializeComponent内部使用。

作为使用XAML的框架或技术与应用程序和编程模型结合使用的基础结构的一部分,InitializeComponent的实现是可广泛观察到的。例如,每当您查看WPF页面和应用程序中XAML根元素的生成类时,您都会在输出中看到InitializeComponent定义。该方法也存在于已编译的程序集中,并且在WPF应用程序模型中起作用,该模型在XAML解析时加载XAML UI内容(我想因此InitializeComponent()必须在接口中并且是公共的,以便其他外部WPF相关)程序集可以利用它)。

为了进一步解释这一点,请转到您的(说):Window1.g.cs类:WPFProject项目中的public方法的定义,并将其访问权限从private更改为InitializeComponent()


(让.g.cs文件在您的项目中保持打开状态,否则进行构建过程
覆盖此文件,您将无法看到该错误)


现在,当您编译WPF项目时,它将引发如下编译错误:


错误22'WPFProject.Window1'未实现接口成员
'System.Windows.Markup.IComponentConnector.InitializeComponent()'。
'WPFProject.Window1.InitializeComponent()'无法实现
接口成员,因为它不是公共的。


此外,[System.Diagnostics.DebuggerNonUserCodeAttribute()]被标记为属性,因此在调试时无法进入此方法。

还有另一个link,它将帮助您详细解释

08-15 23:39