美文网首页
2018-03-19

2018-03-19

作者: deeg | 来源:发表于2018-03-19 22:30 被阅读0次

    Uwp 控件学习记录

            其实一开始,这个作业对我来说,是很困难的,因为我觉得,凡是放到XAML Controls Gallery里的控件肯定也是官方审核过,考虑过后放进去的的,哪里有什么make no sense的啊。后来才发现,老师很调皮,把强化学习认识一下五个控件的任务变成了找五个make no sense的任务,其实在找的过程中,也就是认识并思考这些控件作为我们的工具、武器,可以在哪些场合发挥作用吧。

    I.Acrylic

            我接触的第一个控件是Acrylic.这个控件以调整三个要素实现Win7中原来的“毛玻璃”效果,分别是Tint Opacity,Tint Color和Fallback Color,参考实现效果如下图:

            初看这个效果,其实我是比较满意的,不过后来我发现了它形式比较单一的问题,总不能每个用了Acrylic控件的App最后都是中间一个某颜色的圈吧,很容易就会产生审美疲劳的。

            通过查资料,我知道了最初的类似控件是Aero,是Windows vista和Windows 7中才有的“透明玻璃”特效,其实用户反响还是不错的,最后为什么撤了我到现在都没搞明白……Acrylic出现以后,又能实现类似Aero的玻璃特效了,对喜欢这种设计的人来说还是很不错的。

            并且,Acrylic还有环境限制,win10 的版本最低为 1709 ,在模拟器中是 16299。(或许这就是系统环境有要求的原因吧,一切都是这么的巧合)其实在Gallery里能介绍的东西不多,都只是概况介绍。其实,Acrylic 可以分为两种:Background acrylic 和In-app acrylic。其实大家平时都在用,就是没在意,好看就完事了。

            Background acrylic透视整个应用UI,可以看到应用窗体后的其它应用或桌面(在ThemeResource中名称包含 -AcrylicWindow-)。

            In-app acrylic只透视套用了acrylic brush的元素(在ThemeResource中名称包含 -AcrylicElement-)。两者效果图如下:

    再补充一些内容,列举一些win10自带的很多 Acrylic resources ,可以直接使用。

    比如Background acrylic的:

    SystemControlAcrylicWindowBrush,

    SystemControlChromeLowAcrylicWindowBrush,

    SystemControlBaseHighAcrylicWindowBrush,

    SystemControlBaseLowAcrylicWindowBrush,

    SystemControlAltHighAcrylicWindowBrush,

    SystemControlAltLowAcrylicWindowBrush

    In-app acrylic需要用:

    SystemControlAcrylicElementBrush ,

    SystemControlChromeLowAcrylicElementBrush ,

    SystemControlBaseHighAcrylicElementBrush ,

    SystemControlBaseLowAcrylicElementBrush ,

    SystemControlAltHighAcrylicElementBrush ,

    SystemControlAltLowAcrylicElementBrush

            经过一番探索,我发现我原来发现的“问题”似乎是个笑话,Acrylic会根据你显示的内容展现一个“毛玻璃”特效,而不仅仅是个圈……

    我们可以发现,其实Acrylic是一个很强劲的控件,它虽然简单,但是能给人带来的视觉体验很不错。

    这是两幅效果对比图:

    而在应用中可以体现为:

            这样的效果已经相当令人满意了,而Acrylic控件还存在的一个问题是滥用问题。尤其是某些应用在整个背景都使用了Acrylic,但又处理不好内容的显示,导致文字等内容的识别率下降。

            再深入的内容就要讲好多好多了,我也还没有全部学习,就不赘述了。总之,Acrylic是个简单,但powerful的控件,除了可能用不好,没什么问题了。

    *相关参考:http://www.cnblogs.com/dino623/

    II.ColorPicker

            接下来说说这个控件吧,其实这个控件我们都不陌生,就是通过点击取色板,这里我是理解为某一个(集群)像素,可以分析出RGB三要素实现取色,从功能上说,其实已经很不错了。

            经过观察,我发现侧边栏还有一个Alpha Enabled,是打开透明度的开关,至此,我觉得,既然都给它加了透明度的选项了,那肯定还可以加别的东西啊,试想我们作为非绘画界人士,一个东西是什么颜色,RGB是多少,那就是一概不知啊,也就是说,我们并不能很方便的用取色板调颜色。如果在侧边栏添加一列Elements,可以选择一些常用的比如天空,树叶(各季节),或者其它一些常见动物的毛发的颜色等。这样在取色没有参照物的时候也能通过选择Elements来生成常用的RGB数据。可能这个功能会因为数据不够而显得很鸡肋,因为毕竟对树叶而言,就有好多不同程度的绿,新叶和老叶就是完全不同的绿,但是在相当大数据的支持下,这个取色板一定会变身为一个功能强大的取色板&生色器。

    III.InkCanvas

            InkCanvas控件在我的理解就是一个简易的只有画笔的画板,它通过响应鼠标滑动事件和调整画笔粗细、颜色、圆滑等参数实现简单的画笔功能。其实这个控件看起来还是相当简陋的,颜色选择少,背景板还只能是白色。

            通过查阅资料,我发现,它还真的就是一个简陋的画板。但是关于其用法,也有以下汇总:

            InkCanvas设置位置跟Canvas一样。通过InkCanvas.Top之类的设置,需要设置的属性有EditingMode,来自于InkCanvasEditingMode枚举,它有如下7个属性。

    1.None=0//忽略鼠标和手写笔输入

    2.Ink = 1//允许用户绘制批注,默认模式。使用鼠标或者手写笔绘图时,会绘制笔画

    3.GestureOnly = 2//不远许用户绘制笔画批注,但会关注预先定义的特定姿势,由System.Windows.Ink.ApplicationGesture定义笔势

    4.InkAndGesture = 3//允许用户绘制壁画批注,也可以识别预先定义的姿势

    5.Select = 4//允许用户选择保存在Children集合中的元素,要选择一个元素用户必须单机该元素或者拖动套索选择该元素,一旦选择一个元素就可以移动该元素,改变其尺寸或将其删除

    6.EraseByPoint = 5//擦除鼠标选中的笔画

    7.EraseByStroke = 6//擦除选中的一笔,开始到结束都会擦除

            下面的事件可以通过设置EventArgs对象的Cancel属性取消时间(以ing结尾的事件)

    StrokeErasing//擦除时

    SelectionChanging//选中时

    SelectionMoving//移动时

    SelectionResizing//放大时

            ==》需要注意的事件,先执行ing事件,次执行ed事件

    ActiveEditingModeChanged//编辑模式发生改变时

    Gesture//删除笔画时

    StrokeCollected//绘制完笔画时

    SelectionChanged//选中时

    SelectionMoved//移动时

    SelectionResized//放大时

    StrokeErased//擦除时

            体验后,我觉得这个功能非常鸡肋,还不如做一个更正经的画图板,加上橡皮擦和背景色等功能啊。

    IV.Slider

            Slider控件通过在一条横线上拖动滑块改变数值,这个功能看起来很方便。但是如果对这些控制指标有精确要求比如,我无论如何都不能在下列的第二个滑块那拉到843,这里有它最小间隔是10的问题,但是,就算是拉到850,也得小心翼翼的托滑,假设旁边有一个输入数字的格子,我们直接输入850或者843,不就免除了因拖拽不仔细造成的问题了吗?

            通过查阅资料,我发现Slider控件中,基本的滑块是水平的,有一个单一的手柄,可以用鼠标或箭头键进行移动,就如A simple Slider一样。而第二种是多个滑块,效果图如下:

            其实在使用过程中,它们同样有无法精准定位滑块位置的问题存在。而第三种,

            这里就可以通过调整最小床位数直接控制滑块的位置,我觉得这里的功能就还比较令人满意。另外,还有垂直滑块带范围功能的扩展,演示图如下:

            相比较之下,这个控件的功能就比较简陋了,无法精准定位滑块确实不方便使用。

    V.CalendarView

            CalendarView控件通过在一个6X7的表格里根据月份规律一直重复每个月份的日期,效果如下:

            其实作为日历,他显示几月几日的功能已经体现出来了,但是像重要节日,情人节、国庆节等,在日历上都没有什么标注或者提示,这说明这个日历还是有所欠缺的。通过查阅资料,比如我自己的电脑日历:

            它就显示了上文提到的Acrylic控件的功能,而且,除了日期,它还显示了农历的日期以及元宵节、春分等重要节日或时令,这就有比较好的用户体验了。

            通过测试,还可以发现当我选中某天,比如2017年12月8日时,被选中日期会有一个紫色边框,这个功能也还挺好的,但是如果调整为以下显示就更好了。

            还有,这个就比较花里胡哨了,不过作为日历,它也是清新脱俗的吧,这是有人自定义的日历,我拿图贴一下,显然,阴历和重要节日,比如图中的元旦,还是日历上非常重要的元素,而CalendarView中却没有体现,这是不负责任的。(Chinese的可能有,我没加载出来,并没能看见)

            显然在显示方面,这个更加清晰。

            我看到了控件中还有选项,CalendarIdentifier可以选择是哪个的日历,我发现,它竟然是这个样子的。

            Taiwan和Chinese,这是想干嘛?好吧,抛去这个不说,反正我都加载不出来,一点击就崩溃,我也不知道哪里出问题了,用户体验挺差的。

            学习总结:控件世界很大很广,每一个控件出现都是为了解决某个问题,或许有时候我们怎么也想不出它到底是干嘛用的,可能是因为现有的高级控件已经解决了那个问题。但是,它们作为第一批为帮助人们解决某类问题而出现的控件,其存在都是前辈们智慧的结晶,我们在认识它们的时候应该回溯历史,而不是一昧的去批判。所有既生控件,作为程序员们创造的武器之一,值得被我们尊重。

    相关文章

      网友评论

          本文标题:2018-03-19

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