第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時(shí)綁定郵箱和手機(jī)立即綁定

控件開發(fā)選型指南

標(biāo)簽:
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


點(diǎn)擊查看更多內(nèi)容
TA 點(diǎn)贊

若覺得本文不錯(cuò),就分享一下吧!

評論

作者其他優(yōu)質(zhì)文章

正在加載中
  • 推薦
  • 評論
  • 收藏
  • 共同學(xué)習(xí),寫下你的評論
感謝您的支持,我會(huì)繼續(xù)努力的~
掃碼打賞,你說多少就多少
贊賞金額會(huì)直接到老師賬戶
支付方式
打開微信掃一掃,即可進(jìn)行掃碼打賞哦
今天注冊有機(jī)會(huì)得

100積分直接送

付費(fèi)專欄免費(fèi)學(xué)

大額優(yōu)惠券免費(fèi)領(lǐng)

立即參與 放棄機(jī)會(huì)
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號

舉報(bào)

0/150
提交
取消