我刚刚开始了解WPF,并想创建一个可重用的WPF控件。
当我查看用于在Visual Studio中创建项目的选项时,我看到了"WPF用户控件库“和"WPF自定义控件库”。我不清楚它们之间的区别是什么,我在谷歌上也没有找到任何像样的解释。
我想了解它们之间的区别,并理想地看到一些示例,说明何时使用一个而不是另一个。
发布于 2009-04-30 16:26:40
在实践中,自定义控件是在代码级实现的,而您可以将XAML用于用户控件。自定义控件扩展了一个WPF控件基类,并通过代码提供了其他功能,因此所有添加的逻辑和表示形式都必须在代码中实现。
从技术上讲,用户控件是一个普通的内容控件,您可以在代码的某些部分中对其进行扩展,但通常会通过在其中放置其他控件来扩展它。因此,正如肯特提到的,UserControl是其他控件的集合。这在很大程度上限制了您可以对用户控件执行的操作。它更容易使用,但比完整的自定义控件有更多限制。
从运行时的角度来看,这些控件有很小的不同。在构建应用程序并将UserControl放入其中时,控件树中将包含一个具体的UserControl模板。因此,如果我们考虑一个很烂的特殊按钮的例子。如果使用的是用户控件,则需要在<UserControl>元素中添加一个按钮。当使用自定义控件时,您很可能会从按钮派生控件本身。不同之处在逻辑树中可见。
而自定义控件将提供类似于
UserControl会给出一个逻辑树,
的
因此,最后,UserControl只是一个普通的ContentControl,您可以对其进行一点扩展,并为其预定义内容。自定义控件提供了更大的灵活性,但代价是易于实现,因为您必须在代码中执行所有逻辑和交互,而不是享受XAML的好处。
尽管如此,我并不认为Visual Studio模板有太大的不同。最有可能的情况是,Visual Studio自定义控件只创建一个具有空自定义控件的项目,而用户控件项目是一个具有空用户控件的项目。您可以稍后将任何类型的项添加到项目中。
更新
关于何时使用自定义控件和用户控件,我的观点是,如果您可以使用用户控件完成一些工作,并且逻辑树中的额外控件元素不会困扰您,那么使用用户控件,因为它们更容易创建和维护。仅当您有理由不使用用户控件时,才使用自定义控件。
发布于 2009-04-30 16:07:56
Control表示一些可换皮(可模板)的行为,而UserControl通常是特定于应用程序的Control的更高级别聚合。
更多信息,请访问here。
发布于 2021-12-10 17:42:12
用户控件库、自定义控件库和WPF类库模板之间的差异
为了回答最初的问题,两个库模板之间的主要区别是,一个库模板附带了默认的空用户控件,另一个库模板附带了默认的空自定义控件。它们都是WPF类库。这两个项目都可以包含零个或多个用户控件以及零个或多个自定义控件。
此外,正如Novitchi S和Cameron Macfarland在单独的帖子中所解释的那样,自定义控件库还添加了一个ThemeInfo程序集属性来解析控件的默认样式/模板的位置。
用户控件和自定义控件之间的区别
用户控件是WPF控件(包括其他用户控件)的聚合,而自定义控件是从Control派生的类。
关于何时在开发用户控件、自定义控件或从框架元素派生之间进行选择,This MSDN article提出了以下建议。
如果满足以下所有条件,请考虑从UserControl派生:
与仅由现有components.
,构建
如果符合以下任一条件,请考虑从Control派生:
通过ControlTemplate.
如果符合以下任一条件,请考虑从FrameworkElement派生:
除了simple element composition.
来自其他StackOverflow答案的其他好建议:
Reed Copsey explains "UserControls旨在将多个WPF控件组合在一起,以便在其他控件的基础上构建一组功能“,并进一步分享了他的经验,”在WPF中对CustomControls的需求实际上相当少,因为WPF模板选项和附加属性允许您对标准控件做几乎任何事情“。
Mikko Rantanen similarly shares their opinion“使用自定义控件和用户控件是指,如果您可以使用用户控件完成某些工作,并且逻辑树中的额外控件元素不会干扰您,则可以使用用户控件,因为它们更容易创建和维护。”
https://stackoverflow.com/questions/807703
复制相似问题