WPF 控件模板与用户控件

标签 wpf mvvm user-controls controltemplate

我最近制作了一个UserControl,这花了相当长的时间,因为我必须使用自定义依赖属性等等......

无论如何,它只是一堆 3 个控件:TextBox、带有分层树的 Popup。

现在我意识到我可能只能编写一个ControlTemplate。那么使用 UserControl 的好处是什么?

最佳答案

这里需要考虑三种情况:UserControl、ControlTemplate 和自定义 Control。 (我猜 DataTemplate 不需要解释)

自定义控件是您在创建新 UI 组件的基本功能时提供的东西。这样做有各种优点和缺点,但例如,如果您想要 ItemsControl 的自定义选择行为,最好通过子类化 Selector 或 MultiSelector 来实现(wpftoolkit DataGrid 可以做到这一点)。另外,如果您想要一个包含新 DependencyProperty 的对象,则在大多数情况下您将从 Control 派生。

这里包含的 wpf 原则是“lookless”控制范例,或者“一定要期待有人模板化你的 Control,或者至少让它在你自己的模板场景中表现良好”。自定义控件通常在创建时考虑到可重用性,通常作为框架 dll 的一部分。

ControlTemplate本质上是对替换可视化树的描述,可以在 FrameworkElements 上显式设置,也可以作为样式的一部分。当您的目标主要是提出申请并完成申请时,您应该选择此选项。如果您能够正确获取绑定(bind)和触发器(以及可能包含的 Style 本身),您几乎可以在视觉上使用 ControlTemplate 执行任何操作。所有这些都可以声明为可重用的资源,为您的应用程序提供一个共同的“主题”。

UserControl 是一个独立的复合控件,其各个部分可在设计器中单独编辑,如果您需要在设计器中查看组件并管理它们,则最好使用它。另一方面,ControlTemplate 不会公开其组件以供设计器中的操作(尽管它是可见的)。您通常会为客户详细信息页面或产品显示浏览器,或者您不想创建完整的控件,但希望在完整的设计器支持下获得详细 View 的任何情况创建一个用户控件。

这里的一个特殊情况是如果您使用 MVVM图案。许多出色的 MVVM 实现都使用 UserControls 作为 View ,并使用 ControlTemplates 和 Styles 作为这些 View 使用的资源。 MVVM 实践还最大限度地减少了对自定义控件的需求,并且具有许多其他好处。

(有关 MVVM 的更多信息,请参阅 Josh Smith、Sacha Barber 和 Karl Shifflett 的精彩文章)

关于WPF 控件模板与用户控件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1131106/

相关文章:

c# - WPF中的MVVM如何与viewmodel通信

c# - 用户控件上的编译错误

wpf - 使工具栏按钮样式应用于工具栏中的用户控件

c# - Update 更改DataGrid 到数据库?

c# - 从 TextBlock 样式设置多边形可见性

WPF 在 WPF 中使用 SVG 文件作为图标的正确方法是什么

c# - 如何从ViewModel调用NavigationService

c# - WPF套接字客户端结构

matlab - 创建自定义且可重用的用户界面控件

wpf - 检查当前是否编辑了 DataGrid 的单元格的代码