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

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (24)

我只是来了解一下WPF,并希望创建一个可重用的WPF控件。

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

我想了解它们之间的差异,并在理想情况下看到一些何时使用其中一个而不是另一个的例子。

提问于
用户回答回答于

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

用户控件在技术上是一个正常的内容控件,可以在代码中的某些部分扩展它,但通常通过在其中放置其他控件来扩展它。因此,正如Kent提到的,UserControl是其他控件的聚合。这在很大程度上限制了您对用户控件所能做的事情。它更容易使用,但比一个完整的自定义控件更受限制。

从运行时的角度来看,这些控件有很小的不同。当构建应用程序并将UserControl放入其中时,控件树将在其中包含一个具体的UserControl模板。所以,如果我们考虑一个蹩脚的例子,一个专门的按钮。如果使用的是用户控件,则应该在<UserControl>元素。当使用自定义控件时,最有可能的是从按钮派生控件本身。这种差异在逻辑树中是可见的。

因此,最终UserControl只是一个普通的ContentControl,可以对其进行扩展,并对其预定义内容。自定义控制以易于实现为代价提供了更大的灵活性,因为必须完成代码中的所有逻辑和交互,而不是使用XAML。

尽管如此,我认为VisualStudio模板并没有太大的不同。很可能,VisualStudio自定义控件只创建一个带有空自定义控件的项目,而用户控件项目是一个具有空用户控件的项目。

更新

我对何时使用自定义控件和用户控件的看法是,如果可以使用用户控件完成一些事情,而逻辑树中的额外控制元素不会困扰您,那么使用一个用户控件,因为它们更容易创建和维护。只有在有理由不使用用户控件的情况下才使用自定义控件。

用户回答回答于

Control表示一些可皮肤的行为(模板),而UserControl的高级聚合。Controls是特定于应用程序的。

扫码关注云+社区