我的 WPF 用户控件的公共接口包含自动生成的 InitializeComponent 方法(包含在部分类中)。这对我来说是一个惊喜,因为我期望这样一个内部的东西是私人的。
有什么方法可以从用户控件公共界面中删除 InitializeComponent 吗?
我的 WPF 用户控件的公共接口包含自动生成的 InitializeComponent 方法(包含在部分类中)。这对我来说是一个惊喜,因为我期望这样一个内部的东西是私人的。
有什么方法可以从用户控件公共界面中删除 InitializeComponent 吗?
InitializeComponent
是定义在接口上的方法,System.Windows.Markup.IComponentConnector
用于加载组件的编译页面。
请参阅此链接MSDN
的以下摘录,其中包含更多信息:
IComponentConnector
由 内部使用Baml2006Reader
。
作为与应用程序和编程模型结合InitializeComponent
使用的框架或技术所提供的基础设施的一部分,可以广泛观察到 的实现。XAML
例如,每当您查看为 WPF 页面和应用程序中的 XAML 根元素生成的类时,您将看到在输出中定义的 InitializeComponent。该方法也存在于编译的程序集中,并在 WPF 应用程序模型中发挥作用,在 XAML 解析时加载 XAML UI 内容(我想因此InitializeComponent
必须在接口中并且是公共的,以便其他外部 WPF 相关程序集可以使使用它)。
为了进一步解释这一点,请转到InitializeComponent()
您的(say)Window1.g.cs
类中的方法定义:say:WPFProject
项目,并将其访问权限从更改public
为private
(保持 .g.cs 文件在您的项目中打开,否则构建过程会覆盖此文件,您将无法看到错误)
现在,当您编译 WPF 项目时,它会引发如下编译错误:
错误 22“WPFProject.Window1”未实现接口成员“System.Windows.Markup.IComponentConnector.InitializeComponent()”。'WPFProject.Window1.InitializeComponent()' 无法实现接口成员,因为它不是公共的。
此外,InitializeComponent()
标有 [System.Diagnostics.DebuggerNonUserCodeAttribute()]
属性,因此您在调试时无法单步执行此方法。
还有另一个SO QA 讨论,可以帮助您更详细地解释
如果你能控制自己,你会感觉更好internal
吗?
<UserControl
x:Class="PBbase.Client.Navigation.UserControl1"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
x:ClassModifier="internal">