用户控件库和自定义控件库之间有什么区别?

时间:2009-04-30 16:05:51

标签: wpf user-controls custom-controls

我刚刚开始加速WPF,并希望创建一个可重用的WPF控件。

当我查看在Visual Studio中创建项目的选项时,我会看到“WPF用户控件库”和“WPF自定义控件库”。我不清楚他们之间的区别是什么,我的Google搜索没有找到任何合适的解释。

我想了解它们之间的差异,理想情况下会看到何时使用其中一个的例子。

2 个答案:

答案 0 :(得分:108)

实际上,自定义控件是您在代码级别实现的,而您可以将XAML用于用户控件。自定义控件扩展了一个WPF控件基类,并通过代码提供了附加功能,因此所有添加的逻辑和表示都必须在代码中实现。

用户控件在技术上是一种普通的内容控件,您可以在代码的某些部分进行扩展,但通常通过在其中放置其他控件来扩展它。因此Kent提到UserControl是其他控件的聚合。这极大地限制了用户控件的功能。它比使用完全自定义控件更容易使用,但更有限。

这些控件与运行时的观点有很小的不同。构建应用程序并将UserControl放入其中时,控件树中将包含一个具体的UserControl模板。因此,如果我们考虑一个专门按钮的蹩脚示例。如果您使用的是用户控件,则需要在<UserControl>元素中添加一个按钮。使用自定义控件时,您最有可能从按钮派生控件本身。差异将在逻辑树中可见。

虽然自定义控件将提供类似于

的逻辑树
  • 窗口
    • 的CustomButton

UserControl将提供

的逻辑树
  • 窗口
    • CustomButtonUserControl
      • 按钮

所以最后UserControl只是一个普通的ContentControl,您可以稍微扩展一下,并为此预定义内容。自定义控件以易于实现的代价提供更大的灵活性,因为您必须在代码中执行所有逻辑和交互,而不是获得XAML的好处。

尽管如此,我认为Visual Studio模板没有那么大的区别。很可能Visual Studio自定义控件只创建一个带有空自定义控件的项目,而User Control项目是一个具有空用户控件的项目。您可以稍后将任何类型的项目添加到项目中。

<强>更新

我对何时使用自定义控件和用户控件的看法是,如果您可以使用用户控件完成某些操作并且逻辑树中的额外控件元素不会打扰您,请使用用户控件,因为它们是如此更容易创建和维护。仅在您有理由不使用用户控件时才使用自定义控件。

答案 1 :(得分:23)

Control表示一些可换肤(可模板化)的行为,而UserControl通常是特定于应用程序的Control的更高级别聚合。

有关详情here