-.NET频道向您推荐《让你的代码“炫”起来——WPF开发教程》专题。我们来看看Windows系统中的Aero风格的Tree是什么样子的。
网站建设哪家好,找成都创新互联公司!专注于网页设计、网站建设、微信开发、小程序设计、集团企业网站建设等服务项目。为回馈新老客户创新互联还提供了内蒙古免费建站欢迎大家使用!
上面这样都是系统中非WPF实现的Tree。多数Item都有MouseOver,Selected和Selected and Focused三种附加状态。
我们再来看看WPF中的TreeView在默认情况的是什么样子的。
相信大家一眼就可以看出来,这明明就是XP风格的嘛。和Aero风格的Tree差距实在是太大了。而且问题很严重。下面列举一二。
1. 收起的三角箭头模糊。而且此模糊用SnapsToDevicePixel和UseLayoutRendering都无法解决。如下图所示。
下面的那个就是WPF的默认风格。而间三角与文本之间的间距也不一样。
2. TreeViewItem只有Selected的效果,而且是XP风格的。
3. WPF的TreeViewItem的三角在MouseOver时,只变色,而没有发光效果。而Win32的是有发光效果的。
4. 展开的三角箭头与收起的三角箭头相比,水平位移过大。如下图所示。
右边是WPF的TreeView默认风格,与Win32的相差了将近两个像素。
下面我们来解决问题1,2和3。
WPF的TreeViewItem默认的三角实现方式比较复杂。如下图所示。
这个三角的Path可以描述为M0,0 L6,0 0,6Z。线宽为1个像素。这样,垂直的那条线,虽然是一个像素宽,但是不与Device Pixel重合。结果就是左右各是半个像素宽。最终显示在屏幕上了就成了两个像素宽的,50%的灰色的线。肉眼看上去就是模糊了。
我也很奇怪为什么SnapsToDevicePixel和UseLayoutRedering 在这个问题上会失去效力。解决方案就是让Path的Data也对齐到像素就可以。如下。
这个看上去都是用小数,结果却是对齐到了屏幕像素点。显示结果就能很清晰了。
再就是定义TreeViewItem的那三个状态。
从图中可以看出,这个Item是有两个Border的,背景和内Border都是渐变色。
Item State |
Element |
Brush |
Mouse Over |
Border |
#FFB8D6FB |
Inner Border |
|
|
Background |
|
|
Selected IsActive |
Border |
#FF84ACDD |
Inner Border |
|
|
Background |
|
|
Selected Not IsActive |
Border |
#FFDADADA |
Inner Border |
|
|
Background |
|
上面的值都是用Paint.NET从Win32实现的TreeView的截图中手工取出的值,仅供参考。
最后优化完成的TreeViewItem的样式如下所示。不要看错了,这个可是WPF的哦。
文章题目:详解如何打造Aero风格的TreeView
分享路径:http://www.csdahua.cn/qtweb/news16/74516.html
网站建设、网络推广公司-快上网,是专注品牌与效果的网站制作,网络营销seo公司;服务项目有等
声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 快上网