我的WPF用户控件的公共接口包含自动生成的InitializeComponent方法(包含在部分类中)。对我来说,这是一个惊喜,因为我期望这样的内部工具是私有的。
有什么方法可以从用户控件公共界面中删除InitializeComponent?
最佳答案
InitializeComponent
是在接口System.Windows.Markup.IComponentConnector
上定义的方法,用于加载组件的已编译页面。
请参阅以下MSDN
摘录的IComponentConnector
,其中包含更多信息:Baml2006Reader
由InitializeComponent
内部使用。
作为使用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,它将帮助您详细解释