Sib*_*Guy 7 .net wpf user-controls initializecomponent
我的WPF用户控件的公共接口包含自动生成的InitializeComponent方法(包含在部分类中).这对我来说是一个惊喜,因为我预计这样的内部东西是私密的.
有没有办法从用户控件公共接口中删除InitializeComponent?
InitializeComponent是在接口上定义的方法System.Windows.Markup.IComponentConnector,用于加载组件的编译页面.
请参阅MSDN此链接中的摘录,其中包含更多信息:
IComponentConnector在内部使用Baml2006Reader.
InitializeComponent作为使用XAML与应用程序和编程模型结合使用的框架或技术提供的基础结构的一部分,可以广泛地实现这些实现.例如,每当您在WPF页面和应用程序中查看生成的XAML根元素类时,您将看到输出中定义的InitializeComponent.该方法也存在于已编译的程序集中,并在WPF应用程序模型中扮演一个角色,即在XAML解析时加载XAML UI内容(我想因此InitializeComponent必须在接口中并且是公共的,以便其他外部WPF相关程序集可以使用它).
为了进一步解释这一点,请转到InitializeComponent()(比如说)Window1.g.cs类中的方法定义:WPFProject项目,并将其访问权限更改public为private
(保持.g.cs文件在项目中打开,否则构建过程会覆盖此文件,您将无法看到错误)
现在,当您编译WPF项目时,它会抛出一个编译错误,如下所示:
错误22'WPFProject.Window1'未实现接口成员'System.Windows.Markup.IComponentConnector.InitializeComponent()'.'WPFProject.Window1.InitializeComponent()'无法实现接口成员,因为它不是公共的.
此外,InitializeComponent()标有 [System.Diagnostics.DebuggerNonUserCodeAttribute()]属性,因此您无法在调试时进入此方法.
还有另一个SO QA讨论,可以帮助您更详细地解释