为WPF中DropShadowBitmapEffect提供轻量级的替代品
原文:为WPF中DropShadowBitmapEffect提供轻量级的替代品
为WPF中DropShadowBitmapEffect提供轻量级的替代品
周银辉
WPF有一个激动人心的新特性:我们可以很方便地为可视元素提供位图效果(BitmapEffect),比如阴影等.但令人沮丧饿是位图效果是非常消耗CPU资源的,从平时的开发中我们几乎可以得出的两条经验:1,尽量少地使用位图效果,因为它是由CPU计算的而不是GPU. 2,不要将位图效果与稍稍复杂一点的动画(Animation)使用,它常常使动画变得很不流畅.
在位图效果中,最常用的当数阴影(DropShadowBitmapEffect),这里有一个DropShadowBitmapEffect的替代品SystemDropShadowChrome,其虽算不上完美,但在很多时候却是一个不错的解决DropShadowBitmapEffect性能问题的方法.
我们可以使用一个SystemDropShadowChrome对象,其将充当"阴影",然后将我们需要添加阴影的对象作为SystemDropShadowChrome对象的Child,这与将一个对象作为的Border的子对象一样.
在上图中,淡蓝色方块的阴影效果便是使用我们的SystemDropShadowChrome得到的,桔黄色方块的阴影效果是使用DropShadowBitmapEffect得到的.你可以粘贴下面的代码到XamlPad查看:
<Page xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:a="clr-namespace:Microsoft.Windows.Themes;assembly=PresentationFramework.Aero" >
<Grid Width="579" Height="492">
<a:SystemDropShadowChrome Width="75" CornerRadius="3,13,3,13" RenderTransformOrigin="0.5,0.5" HorizontalAlignment="Left" Margin="185,149,0,0" x:Name="systemDropShadowChrome" VerticalAlignment="Top" Height="75">
<Border Background="LightBlue" CornerRadius="3,13,3,13" Margin="1,1,1,1" />
</a:SystemDropShadowChrome>
<Border Background="#FFE78E16" CornerRadius="3,13,3,13" RenderTransformOrigin="0.5,0.5" HorizontalAlignment="Left" Margin="185,0,0,132" x:Name="border" VerticalAlignment="Bottom" Width="75" Height="75" >
<Border.BitmapEffect>
<DropShadowBitmapEffect ShadowDepth="2"/>
</Border.BitmapEffect>
</Border>
</Grid>
</Page>另外,阴影的颜色也是可以设定的,我们只需设置SystemDropShadowChrome对象的Color属性即可.
但很不幸运的是SystemDropShadowChrome对象不能为设置其他形状的元素设置阴影,因为它自身的形状只能做到方形与圆角方形.
你可以点击这里 或 这里查看更多的关于SystemDropShadowChrome的讨论
为WPF中DropShadowBitmapEffect提供轻量级的替代品的更多相关文章
- wpf中的触发器详解
原文 http://zwkufo.blog.163.com/blog/static/25882512009724113250883/ 7.1.2 简单逻辑的表示--触发器(1) 在本章的多处介绍中都会 ...
- wpf中的触发器详解 (转自 乂乂的日志 - 网易博客)
2010-03-24 16:19:07| 分类: WPF相关 | 标签: |字号大中小 订阅 wpf中的触发器详解 WPF/C# 2009-08-24 11:32:50 7.1.2 简单 ...
- WPF中实现PropertyGrid(用于展示对象的详细信息)的三种方式
原文:WPF中实现PropertyGrid(用于展示对象的详细信息)的三种方式 由于WPF中没有提供PropertyGrid控件,有些业务需要此类的控件.这篇文章介绍在WPF中实现PropertyGr ...
- WPF中嵌入Skyline提供的COM组件填坑
网上有很多关于在WPF中使用的Skyline提供的COM组件的教程,但大都雷同一律,其中很多的细节均为涉及,本文意在在其原基础上进行一些细节的补充. 工具:Visual Studio 2017 1. ...
- 把演讲人的桌面、头像、声音合成后推送到 指定的直播流平台上; 录制电脑桌面、摄像头头像、声音保存为本地视频; 适用于讲课老师、医生等演讲内容保存为视频; 提供PPT嵌入Winform/WPF解决方案,Winform/WPF 中嵌入 office ppt 解决方案
提供PPT嵌入Winform/WPF解决方案,Winform/WPF 中嵌入 office ppt 解决方案 Winform/WPF 中嵌入 office ppt(powerpoint)解决方案示: ...
- 在 WPF 中使用 MahApps.Metro.IconPacks 提供的大量图标
MahApps.Metro.IconPacks https://github.com/MahApps/MahApps.Metro.IconPacks 提供了大量的高质量的图标供WPF使用,极其方便. ...
- 提供PPT嵌入Winform/WPF解决方案,Winform/WPF 中嵌入 office ppt 解决方案
Winform/WPF 中嵌入 office ppt(powerpoint)解决方案示: 1. 在winform中操作ppt,翻页.播放.退出:显示 总页数.当前播放页数 2. 启动播放ppt时录制视 ...
- 在WPF中自定义你的绘制(二)
原文:在WPF中自定义你的绘制(二) 在WPF中自定义你的绘制(二) ...
- WPF中的3D变换PlaneProjection
在UWP中有一个比较好用的伪3D变换PlaneProjection,可以以一种轻量级和非常简单的方式实现3D的效果.这种效果在Silverlight中也有这种变换,但在WPF中确一直没有提供. 虽然W ...
随机推荐
- 团队合作学习scrum
查找资料学习scrum心得: 什么是scrum : scrum是一种轻量级软件开发方法,即一种做事的方法.scrum原本是指橄榄球运动的一个专业术语,原意为团队通力合作,在场地内传球.这个过程需要认真 ...
- Arcgis for Android 空间数据WKT与JSON描述
点线面数据标准格式 一. 点 WKT: POINT(-118.4 -45.2) JSON: { "x": -118.4, "y": -45.2, "s ...
- LA 3126 出租车
题目链接:https://vjudge.net/problem/UVALive-3126 题意:有m个客人,位于不同的位置,去一些地方,出发的时间给出,要一些出租车去接,但是,每辆出租车要在出发前一分 ...
- 【[HNOI2011]数学作业】
我又对着跑出正解的程序调了好久 怕不是眼瞎了 这就是个分段矩阵,我们很容易就得到了递推式 $\(f[i]=f[i-1]*10^k+i\) 其中\(k=log_{10}i\) 于是就是分段矩阵 之后就是 ...
- 【[SDOI2010]粟粟的书架】
第一问的做法好像不太一样 首先第二问非常简单,直接在主席树上二分就好了,单次查询的复杂度\(O(logn)\) 第一问并没有想到有二分这种神仙操作,依旧用的是主席树 我们可以对矩阵建出主席树,也就是像 ...
- MVC学习五:Razor布局页面 _ViewStart.cshtml
如图: _ViewStart.cshtml就是MVC中的布局页面/模板页面. 用户访问流程图: 原理:先去执行Views文件夹下[_ViewStart.cshtml]页面,然后同级目录文件夹(上图中的 ...
- 【洛谷P1073】[NOIP2009]最优贸易
最优贸易 题目链接 看题解后感觉分层图好像非常NB巧妙 建三层n个点的图,每层图对应的边相连,权值为0 即从一个城市到另一个城市,不进行交易的收益为0 第一层的点连向第二层对应的点的边权为-w[i], ...
- Android学习笔记_55_Tween动画 (渐变、缩放、位移、旋转)
Android 平台提供了两类动画. 一类是Tween动画,就是对场景里的对象不断的进行图像变化来产生动画效果(旋转.平移.放缩和渐变).第二类就是 Frame动画,即顺序的播放事先做好的图像,与gi ...
- iOS之已经审核通过的app在App Store上搜不到的解决办法
修改定价将你的app定价修改成0.99刀 修改你的发行范围,全取消后只选中国. save这时候你的app status将会变成pending contract. 将之前的修改都改回来,修改定价free ...
- fastRPC升级
根据fastRPC的应用测试,用DB操作发布服务测试,对已经存在的问题进行升级; 主要修改内容: 1.添加自定义加载器,根据配置文件,允许设置目录,放置第三方jar包,解决打包问题 2.默认情况,服务 ...