我正在使用C# 2008在WPF中创建一个日期/时间用户控件。这是我的第一个用户控件。我还在使用Matthew MacDonald的书,《Pro WPF in C# 2008》。在那本书中,他强烈建议使用WPF自定义控件库项目模板来创建用户控件;所以我遵循了他的建议。我已经完成了应该放入代码后台文件中的代码编写。现在我准备编写XAML。
唯一的问题是,我刚刚发现没有对应的.xaml文件?所以,我不明白为什么在编写用户控件时使用WPF自定义控件库项目更好或更受欢迎?
一个用户控件和一个自定义控件解决两个不同的问题。
UserControls旨在组合多个WPF控件,以构建由其他控件组成的功能集。这经常用于组合窗口或屏幕的一部分,以通过允许您将多个功能块组合成一个“控件”来组织开发。例如,如果您想要制作一个用于编辑用户的控件,提供名字、年龄等文本框,并可将其拖放到窗口中并绑定到一个用户实例进行编辑。(在这种情况下,您正在使用标准控件,例如TextBox,将“组合”一个更复杂的目的的控件。)
然而,CustomControl是指一个新的单一控件。这通常是内置控件的替代品(无法通过模板重新制作)。我发现在WPF中,需要CustomControls的情况实际上非常少,因为WPF模板选项和附加属性使您可以完全学习它们之后使用标准控件完成几乎所有任务。
我还想补充一点,如果你打算从控件继承,使用用户控件会使事情变得更加复杂。例如,如果创建一个基础用户控件,在Xaml中定义了布局,WPF框架将不允许你继承此控件并使用Xaml为子类定义布局。在dotnet 3.5中,Xaml控件无法继承自另一个Xaml控件。