2009-04-30 37 views
135

我只是想加快WPF,并想创建一个可重用的WPF控件。用户控制库和自定义控制库之间有什么区别?

当我看到在Visual Studio中创建项目的选项时,我看到“WPF用户控制库”和“WPF自定义控件库”。我不清楚他们之间有什么不同,我的Google搜索没有得到任何体面的解释。

我想了解它们之间的差异,并理想地看一些什么时候使用它们的例子。

+2

不要忘记嵌套内容或更改控件的模板作为选项。您可以使用这种方式对控件进行非常戏剧性的更改,而无需编写自定义控件。 – MichaC 2009-04-30 16:41:46

+0

MichaC说什么。 WPF最好的部分是现有控件的模板化可以产生巨大的影响。您应该很少需要自定义控件。这与WinForms不同,即使对控件进行细微更改也需要新的派生控件。 – 2009-04-30 16:47:35

+0

仍然有用。有另一个金徽章。 – ouflak 2016-03-03 10:56:58

回答

99

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

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

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

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

  • 窗口
    • 的CustomButton
的逻辑树

的用户控件将给予

    逻辑树
  • 窗口
    • CustomButtonUserControl
      • 按钮

那么到底该用户控件仅仅是一个正常的ContentControl中,你可以扩展位以及您可以预先设定内容。自定义控件以易于实现的价格提供了更大的灵活性,因为您必须执行代码中的所有逻辑和交互操作,而不是从XAML中获益。

尽管如此,我认为在Visual Studio模板中没有太大的区别。最有可能的Visual Studio自定义控件只是创建一个空的自定义控件的项目,而用户控件项目是一个空用户控件的项目。您可以稍后在项目中添加任何种类的项目。

更新

而且我对时使用自定义的控制和用户控制是认为,如果你能得到的东西与用户控制和逻辑树中的额外的控制元件不打扰你做,使用用户控件,因为它们更容易创建和维护。仅当您有理由不使用用户控件时才使用自定义控件。

21

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

更多信息可用here

相关问题