Wpf 用户控件库和自定义控件库之间有什么区别?
我刚刚开始了解WPF,并希望创建一个可重用的WPF控件 当我在VisualStudio中查看创建项目的选项时,我会看到“WPF用户控件库”和“WPF自定义控件库”。我不清楚它们之间有什么区别,我的谷歌搜索也没有找到任何像样的解释Wpf 用户控件库和自定义控件库之间有什么区别?,wpf,user-controls,custom-controls,Wpf,User Controls,Custom Controls,我刚刚开始了解WPF,并希望创建一个可重用的WPF控件 当我在VisualStudio中查看创建项目的选项时,我会看到“WPF用户控件库”和“WPF自定义控件库”。我不清楚它们之间有什么区别,我的谷歌搜索也没有找到任何像样的解释 我想了解它们之间的差异,并在理想情况下查看一些何时使用它们的示例。A控件表示一些可蒙皮(可模板化)的行为,而A用户控件通常是特定于应用程序的控件的高级聚合 更多信息可用。实际上,自定义控件是在代码级别实现的,而用户控件可以使用XAML。自定义控件扩展了一个WPF控件基类
我想了解它们之间的差异,并在理想情况下查看一些何时使用它们的示例。A
控件
表示一些可蒙皮(可模板化)的行为,而A用户控件
通常是特定于应用程序的控件
的高级聚合
更多信息可用。实际上,自定义控件是在代码级别实现的,而用户控件可以使用XAML。自定义控件扩展了一个WPF控件基类,并通过代码提供附加功能,因此所有添加的逻辑和表示都必须在代码中实现 从技术上讲,用户控件是一个普通的内容控件,您可以在代码的某些部分对其进行扩展,但通常通过在其中放置其他控件来扩展它。正如Kent提到的,UserControl是其他控件的聚合。这大大限制了用户控件的使用。它比完全自定义控件更易于使用,但限制更大 从运行时的角度来看,这些控件有一点不同。在构建应用程序并将UserControl放入其中时,控件树中会有一个具体的UserControl模板。因此,如果我们考虑一个专门按钮的蹩脚例子。如果您使用的是用户控件,您应该在
元素中添加一个按钮。使用自定义控件时,很可能是从按钮派生控件本身。差异将在逻辑树中可见
而自定义控件将提供类似于的逻辑树
- 窗口
- 自定义按钮
- 窗口
- 自定义按钮控制
- 钮扣
- 自定义按钮控制
关于何时使用自定义控件和用户控件,我的观点是,如果您可以使用用户控件完成一些事情,并且逻辑树中的额外控件元素不会打扰您,那么请使用用户控件,因为它们更易于创建和维护。只有在有理由不使用用户控件时才使用自定义控件。这是我发现的一个没有很好解释的链接:)。我想我缺少的一件事是skinnable/Templateable的真正含义,以及为什么不能用用户控件实现它。此外,链接文章的最后一句话是“一般来说&简单地说,自定义控件比用户控件具有更好的灵活性和可重用性”。如果这是真的,那么我为什么要创建一个用户控件?自定义控件可以用来聚合其他控件吗?可蒙皮/可模板化问题呢?不确定聚合是什么意思。不能通过聚合其他控件来创建自定义控件。但是,您可以从面板控件(如StackPanel、Grid或Panel本身)派生,以便使用自定义控件实现布局容器(不确定是否可以使用用户控件实现)。是的,但如果您只想聚合其他控件,则使用用户控件可能更容易。根据您想要执行的操作,自定义控件可能很难编写,这就是为什么您会选择使用用户控件,即使它只提供功能的子集。当以正确的方式实现时,这两个控件都应该是可蒙皮/模板化的。不幸的是,我的WPF引用目前在办公室,因此我无法检查实现细节。不要忘记嵌套内容或更改控件的模板作为选项。你可以用这种方式对控件进行非常显著的更改,而不必编写自定义控件。正如MichaC所说的。WPF最好的部分是模板化现有控件可以产生巨大的影响。您应该很少需要自定义控件。这与WinForms不同,在WinForms中,即使对控件进行微小更改,也需要一个新的派生控件。仍然很有用。再要一枚金徽章。