为了账号安全,请及时绑定邮箱和手机立即绑定

控件开发选型指南

标签:
Java

webp

你好,旧时光

本文概要

  如果你是从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。



作者:杨凯本尊
链接:https://www.jianshu.com/p/289566cd7309


点击查看更多内容
TA 点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
  • 推荐
  • 评论
  • 收藏
  • 共同学习,写下你的评论
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消