我已经在WPF中编写非常基本的UI已有一年多了。我现在正在开发第一个大型应用程序,因此将更深入地研究XAML中的代码重用。我无法确定标题中提到的三个元素中的每一个何时合适的用例。
何时使用:-款式-范本-用户控件
我不断发现自己试图更改看似简单的内容,例如,选项卡控件中标题标签的文本颜色。但是,在我假设是一个简单的属性设置的任务中,很快,我很快在资源字典中得到了25行代码,因为我完全重写了Tab控件模板以完成此任务。
[当我尝试为可重复使用的节标题创建样式文本块时,发现文本块没有边框。那我该怎么办?重写模板?每次制作标题时都对边框进行硬编码?创建自定义用户控件?
具体来说,在设计用户界面的元素时,为什么以及何时选择每个元素?以及您如何知道哪一个将为您提供所需的结果?
[首先,每个theme和每个基本类型(例如Brush,Font,FontSize等)都有一个资源字典。拥有具有不同样式的不同主题非常昂贵,我宁愿避免使用它。
样式旨在使您的xaml保持简单,可读性以及UI外观均一。因此,资源字典中有许多可重用的样式。如有必要,请按类型将它们拆分为不同的文件。如果样式不应该可重用,则将其精确地放在所属位置,例如在使用它的元素的资源标签中。
总是尝试使用样式来完成,最终您将达到控件的局限性,并且将被迫更改模板,因此,为了使此转换更轻松,最好不要对任何可重用的内容进行硬编码。
您可以从样式中覆盖控件模板,这通常是一个好习惯。例如,您可以为文本块编写样式,以更改模板并使其具有边框。在这种情况下,样式和模板位于同一位置。如果这些模板可重复使用,则将其过时,命名并重新使用。否则,将其保留在样式的ControlTemplate标记内。
在粗略地从头开始编写模板之前,请仔细检查component parts,以查看是否已利用此功能。
用户控件的用途有些不同。首先,我要清楚地说明control,用户控件和自定义控件是三件事。
从技术上讲,您可以为几乎所有内容编写控件或控件模板。但是不同之处在于,模板旨在改变现有控件的外观,而控件旨在使您能够创建不存在的控件。
因此带有边框的文本块仍然是文本块,带有按钮的文本块用户可以与之交互,这只是一个按钮。但是带有用户可以交互按钮的文本框是一个新控件。
我可以说,如果您可以预期将来控件会发生多大的变化,那么您可以轻松地决定它是否始终是同一件事,但外观会得到增强,或者它会是具有新功能的新事物? WPF原始控件无法提供。如果不确定始终可以从样式开始,请覆盖模板。当它需要新功能时,您需要创建一个从现有控件派生的新控件,或者将整个控件重写为自定义控件。但切勿使用用户控件进行操作