
今天在用WPF做自定义滚动条的时候发现一个有趣的问题,足足困扰了我2个小时,在给滚动条的上下翻滚按钮添加事件特效时,居然IsPressed事件外观无效,源代码如下:
<ControlTemplate.Triggers>
<Trigger Property="IsPressed" Value="true">
<Setter TargetName="path" Property="Fill" Value="{StaticResource PressedBrush}" />
<Setter TargetName="path" Property="BitmapEffect" Value="{StaticResource mousedown}"></Setter>
</Trigger>
<Trigger Property="IsMouseOver" Value="true">
<Setter TargetName="path" Property="Fill" Value="{StaticResource HorizontalNormalBrush}"></Setter>
<Setter TargetName="path" Property="BitmapEffect" Value="{StaticResource mouseover}"></Setter>
</Trigger>
</ControlTemplate.Triggers>
起初认为是IsPressed不起作用,再次给IsPressed添加一个不同对象的事件属性:
<Setter TargetName="Border" Property="Margin" Value="5"></Setter>
群里总是有人问WPF三维怎么弄?问的最多的是:“我花了很长时间了解相机、灯光、场影、3D坐标等,但我不会画3D模型”,原因很简单 -- 你们又一次被微软给“呼悠”了,这是微软的一贯手段,新概念推出时总是先吹上天,骗一些程序员过来做小白鼠,然后等骗的人达到了一定的数量,这个概念也就慢慢成熟了,现在的WPF中的3D像.NET Framework 1.1和Silverlight1.0一样是个稚型,不能说他一无是处,高手有高手的搞法,只是你别太相信他们的宣传广告,每个概念(技术)推出时都是这样的,别期望太大关健在于你自己去了解。
话题转回来,WPF的3D目前不适合做UI的人使用,用过3DSMax的人会更加郁闷,原因不说了,这里先说Viewport3D,Viewport3D其实只算是一个Panel用来在窗体中装3D场景和3D元素的,WPF中的3D元素大体只分3种:相机camera、光源light、模型model。

说到图形处理,这里先说一下GDI+,GDI+固然强大但没有硬件加速,全靠软件实现,而且功能受限,而WPF全部(号称)通过显卡GPU计算处理,采用Direct3D引擎,而且硬件加速,强行贯入的“与设备无关单位”概念,让计算机图形处理更加生动有趣,但也有一些人不“适应”,因为WPF渲染引擎绘制时进行了平滑处理,结果把文字也“平滑”了,习惯了XP的像素字体的人都觉得WPF的字体太模糊了,尤其是系统默认的12号宋体字,虽然雅黑体看上去要好一些,但还是有人死咬住这个问题不放,其实这只是习惯问题,等windows 7普及后就会好一点了,而且据说.NET Framework 4.0加入了文字锯齿选项,到时候这个问题自然会解决。

这里我不是来解决这个字体问题(而且事实上我个人认为根本不用解决,雅黑体很好看的),这里我想说的是GDI+和WPF各有优劣,不要进行取舍,以后图形领域发展什么样大家都不知道,目前来讲大部分GUI和图片处理还是要靠GDI+(和GDI)的,尤其是像素图形处理。
.NET Framework 3.5 SP1已经装了一阵子了,一直没时间试一下效果,只听介绍说WPF的运行速度提高了35%左右,这个才是我想要的,WPF速度太慢了,所以我才装它,再好的显卡和CPU运行再简单的效果都让人纠结,那种有节奏性的延迟真的会把人弄成心急梗塞,为了看看微软有没有吹大牛,加上今天有空我想测试一下它的效果,为了达到最佳效果,我给VS2008也打上SP1,做了个很简单的软件,从Bing和Google提供的API搜索图片进行分类保存,然后进行拖放,分别在传统窗体和透明窗体(AllowsTransparency=true)下运行,传统窗体和Windows from速度差不多,搜索图片和显示很快,但是拖拽有点卡,尤其是遇到PNG和GIF图片,去掉图片的阴影和边框就好了,可能是PNG和GIF图片对BitmapEffect优化不行,遇到透明PNG和GIF时,有点延迟,本想拿到一台没有打SP1的机器上对比一下效果,我已经没心情了,修改一下程序后,放在完全透明的窗体(布局也透明了,就剩图片控件了)下运行,运行就慢很多了,不过搜索仍然很快,但鼠标悬停在控件上的效果,延迟达到1秒左右,拖拽不用说了,简置就是Bull shit。

还有一个问题AllowsTransparency=true时居然,WPF新增控件WebBrowser居然仍然是一片空白,真的让人失望,居然把这个问题遗留下来了,我甚至怀疑这是微软的开发人员偷懒直接从windows form那边把WebBrowser拿过来的。
分页: