控件开发选型指南

作者: 杨凯本尊 | 来源:发表于2018-12-23 11:07 被阅读77次
    你好,旧时光

    本文概要

      如果你是从WinForm框架转到WPF框架的开发人员,我想你肯定是已经超级厌烦了WinForm自定义控件的复杂程度,笔者也是在这种情况下转为WPF开发。通过阅读本文你将学会一种技能,这种技能会让你在面对非标准控件(标准控件是指微软提供的类库中的控件)的开发不至于手足无措,它像黑夜里的灯塔,给你在编写非标准控件时提供指引。

    面对非标准控件,我们应该想些什么?

    当我们面对非标准控件的开发时,我们一般会有三种想法:

    1. 有没有满足我需求的第三方库
    2. 有没有其他开发人员已经实现我们的需要或相似的需求
    3. 自己重新造轮子

      显然本文肯定不是想要教会我们怎么使用Github或者Nuget去搜索满足我们需求的第三库,因此第1、2两点我们不考虑;这里假设我们面对的需求就是需要我们自己重新造轮子,那么,我们应该怎么选择呢?有哪些好的标准和尺子来做衡量我们的选择呢?

    控件选型的标准和尺子

      如果我们对样式、绑定、控件模板、数据模板、类型转换器等WPF的基础知识已经了解,那么我们应该知道WPF框架提供的控件都是无外观的控件,具体就是WPF框架将控件的功能(行为)和外观进行了剥离,也就是分开定义;对于Controls中的类来说,.cs用来定义控件有那么功能(行为),而用ControlTemplate来定义控件的展示外观;DataTemplate用来布局数据的展示外观,知道了这两点之后,我们面对非标准控件的编写就需要顺序考虑一下几点:

    1. 列出非标准控件的功能列表
    2. 对标标准库中,查找是否有相似的功能控件,如果有跳到第3步,如果没有跳到第4步
    3. 考虑使用DataTemplate是否可以达到需求,可以,则结束选型;不能,则考虑使用ControlTemplate来实现需求,同样结束选型
    4. 考虑是否可以通过附件属性扩展标准控件来满足需求,如果可以跳回第3步,不可以,跳到第5步
    5. 考虑需求的功能列表是否可以通过组合来实现,如果可以则使用UserControl来实现,结束选型;如果不可以,则跳到第6步
    6. 自定义控件,如果到了需要自定义控件的步骤,那么自定义控件的基类选择同样重要,我们可以选择FrameworkElement或者Control,选择基类的原则是,尽量少编码

    举了例子

      通过上面的阅读,接下来我们来举个例子。这里需要我们编写一个环形进度条的控件。
      首先这个需求需要一个基于Rang和Value控件,在标准控件中,我们有抽象类RangeBase、具体类Slider以及ProgressBar;RangeBase是一个抽象类,如果标准库中提供的它的子类都不满足需求,我们可以选择这个类用于自定义控件的基类。而Slider和ProgressBar的区别在于Value是否可以通过UI进行交互,而我们的需要是不需要交互的,因此,我们选择ProgressBar类。
      接下来,我们考虑是修改ProgressBar的DataTemplate属性还是修改ControlTemplate来达到需求呢?很显然ProgressBar的默认外观是不符合我们需求的,因此我们需要修改ControlTemplate。

    通告

      下篇文章笔者将演示在编写环形进度条控件中使用视觉分层艺术对WPF开发的重要性


    相关文章

      网友评论

        本文标题:控件开发选型指南

        本文链接:https://www.haomeiwen.com/subject/nhmgkqtx.html