原文:《Programming WPF》翻译 第9章 1.自定义控件基础
在写一个自定义控件之前,你需要问的第一个问题是,我真的需要一个自定义控件吗?一个写自定义控件的主要原因是为了用户界面技术专家可以修改控件的外观,但是正如我们在前些章看到的,内容模型和模板意味着这通常是不必要的。WPF提供了一个先进的按照规模的定制技术,你应该记住这些——当考虑写一个自定义控件时。
- 使用属性修改一个已有控件的外观
- 组合已有的一些控件
- 将内容嵌入已有控件
- 使用模板代替一个已有控件
- 创建一个自定义控件或其他自定义元素
这个顺序提供了渐增的能力级别,以每一级别上轻微的额外成效为交换。在这些简单的情形中,你可以通过设置属性来调整一个内嵌控件的行为和外观以满足你对的需求。下一步是将控件编译在一起,形成一个更强大的整体。你可以通过将内容嵌入另一个控件的方式,把这个合成物带入到下一步骤。你可以使用一个模板完全替换外观,正如第5章所描述的。一旦技术1-4都没有满足你的需求,编写一个自定义的元素就像自定义控件,看上去像是一个答案。
是否需要写一个新的可视化元素类型,一个重要的指示是,你是否计划添加一个新的API特性。即使在这种情形,你应该仔细的考虑要写哪一种自定义元素类型,控件并不是唯一的元素种类。通过写一个底层的组件,并集成到已知控件中的外观中,你可以得到更多的弹性。例如,大量的使WPF弹性化的元素,如布局类和Shapes,派生于FrameworkElement,实际上并不是控件——它们不是从Control基类派生的。
如果你确定一个自定义元素使最好的进行办法,你需要做完大量的设计步骤。首先,你必须挑选出基类。它会派生自FrameworkElement,Control,或WPF提供的其它基类型之一么?然后你必须定义API,决定你的组件哪个属性,事件和命令。最后,如果你的新元素提供了与内嵌组件相同的弹性,你需要注意元素和其模板间的接口。