WPF非常棒,因为有很多方法可以实现您的目标。例如,根据我的理解,装饰者可以向UI元素添加一些控件,但我认为通过包含附加元素的自定义控件可以实现相同的行为。
所以,我的问题是:我应该何时更喜欢装饰者更复杂(但我认为,更灵活)的自定义控制? 请考虑我正在广泛使用MVVM模式,我想将命令绑定到附加元素。
特别是,我正在设计一个图表设计器应用程序,我想为我的形状添加连接点。我应该在自定义控件和装饰器之间做出决定的另一个示例是显示自动定位以“跟随”该行的标签的行。
谢谢
答案 0 :(得分:75)
对于大多数用途,Adorners比使用ControlTemplates需要更多的工作。如果您想要装饰者提供的其他功能,请使用它们。否则使用ControlTemplates。
以下是Adorners提供的主要功能:
以下是与使用装饰相关的一些潜在成本,而不是ControlTemplates:
.GetAdornerLayer()
和.Add()
并管理Adorner的生命周期Control
作为装饰者的子级,以便您可以使用ControlTemplate RoutedEvents
转发给AdornedElement DataContext="{Binding AdornedElement.DataContext}"
在您的特定示例中,没有明确的正确答案。
我倾向于使用ControlTemplate作为连接点,因为您可能需要一种方法来指定连接点的位置,而ControlTemplate已经定义了项目本身的布局。另一方面,如果连接点信息是数据驱动的并且仅出现在活动控件上(或被拖动的控件),则最好使用装配器来获得性能优势并简化各个ControlTemplates。
如果线条不是简单的直线,那么自动定位的标签可能非常适合测量/排列计算的角度,但如果您可能会同时看到其中的一万条我会担心表现。
在不了解您的应用程序的情况下,很难说除此之外。