我正在为我的WPF应用程序设计一个对话框窗口。我知道WPF要求所有控件都有默认构造函数,我可以创建需要的所有参数的构造函数。但是默认构造函数必须是公共的吗?我可以将其设置为内部的、私有的或者甚至是受保护的吗?
在WPF中,控件不需要默认构造函数,除非您想从XAML实例化控件。
像这样的控件是完全合法的:
public partial class MyUserControl : UserControl
{
public MyUserControl(string someParameter) : this()
{
InitializeComponent();
}
}
InitializeComponent();
。如果您从XAML实例化控件,则嵌入控件必须可见默认构造函数。因此,如果嵌入控件在同一程序集中,则可以是internal
,否则必须是public
。InitializeComponent
,因为VS默认构建它。还有另一个需要参数的构造函数。它做的第一件事就是调用默认构造函数。我只是不希望类外面的代码调用默认构造函数。实际上,我可能可以完全删除默认构造函数。 - Tony VitabileInitializeComponent()
。将默认构造函数设置为私有,并从非默认构造函数中调用它。我想我误解了您的问题所在。 - thumbmunkeysIntializeComponent
。如果我删除了默认构造函数,我会将调用 InitializeComponent
移到公共构造函数中。将默认构造函数设置为私有后,它可以正常工作。我曾经认为,如果默认构造函数不存在或不是公共的,VS 中的设计师会出问题。 - Tony VitabileMainWindow
构造函数设置为internal
时,我会收到以下错误:System.Windows.Markup.XamlParseException: ''No matching constructor found on type MainWindow. You can use the Arguments or FactoryMethod directives to construct this type. 即使MainWindow
类本身是internal
的,在XAML中添加x:ClassModifier="internal"
后也可以正常工作。这让我更加奇怪,为什么我无法将构造函数设置为internal
。 - SportySpice
Xaml
实例化它。如果这对您来说没问题,那就继续吧。 - Sriram Sakthivel