小编典典

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

all

我刚刚开始了解 WPF,并想创建一个可重用的 WPF 控件。

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

我想了解它们之间的区别,并在理想情况下查看一些何时使用其中一种的示例。


阅读 61

收藏
2022-07-17

共1个答案

小编典典

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

用户控件在技术上是一个普通的内容控件,您可以在代码中的某些部分扩展它,但通常通过在其中放置其他控件来扩展它。因此,正如 Kent
提到的,UserControl 是其他控件的集合。这极大地限制了您可以使用用户控件执行的操作。它比完整的自定义控件更易于使用但更受限制。

从运行时的角度来看,这些控件有细微的差别。在构建应用程序并将 UserControl 放入其中时,控件树中将有一个具体的 UserControl
模板。因此,如果我们考虑一个专门按钮的蹩脚示例。如果您使用的是用户控件,您将在<UserControl>元素内添加一个按钮。使用自定义控件时,您很可能从按钮派生控件本身。差异将在逻辑树中可见。

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

  • 窗户
    • 自定义按钮

UserControl 会给出一个逻辑树

  • 窗户
    • 自定义按钮用户控件
    • 按钮

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

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

更新

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

2022-07-17