WPF中的效果Effect

WPF中的效果Effect

前言

WPF提供了可应用于任何元素的可视化效果。效果的目标是提供一种简便的声明式方法,从而改进文本、图像、按钮以及其他控件的外观。不是编写自己的绘图代码,而是使用某个继承自Effect的类,以立即获得诸如模糊、光辉以及阴影等效果。

效果类

名称说明属性
BlurEffect模糊元素中的内容Radius,KernelType,RenderingBias
DropShadowEffect在元素背后添加矩形阴影BlurRadius,Color,Direction,Opacity,ShadowDepty,RenderingBias
ShaderEffect应用像素着色器,像素着色器是使用高级着色语言事先制作好的并且已经编译过的效果PixelShader

BlurEffect类

最简单的WPF效果是BlurEffect 类。该类模糊元素的内容,就像通过失焦透镜观察到的效果。通过增加Radius属性的值(默认值是5)可增加模糊程度。

            <Button Content="blurred(radius=2)" Padding="5" Margin="3">
                <Button.Effect>
                    <BlurEffect Radius="2"/>
                </Button.Effect>
            </Button>
            <Button Content="blurred(radius=5)" Padding="5" Margin="3">
                <Button.Effect>
                    <BlurEffect Radius="5"/>
                </Button.Effect>
            </Button>
            <Button Content="blurred(radius=20)" Padding="5" Margin="3">
                <Button.Effect>
                    <BlurEffect Radius="20"/>
                </Button.Effect>
            </Button>

在这里插入图片描述

DropShadowEffect类

DropShadowEffect类在元素背后添加了轻微的偏移阴影。

DropShadowEffect类的属性

名称说明
Color设置阴影的颜色(默认黑色)
BlurRadius确定阴影离开内容多远,单位为像素(默认值为5).将该属性设置为0会创建外侧辉光(outer-glow)效果,该效果会在内容周围添加晕彩(halo of color)
Opacity使用从1(完全不透明,默认值)到0(完全透明)之间,使阴影部分透明
Direction使用从0到360之间的角度值指定阴影相对于内容的位置。将该属性设置为0会将阴影放置到右边,增加该属性的值会逆时针移动阴影,默认值是315,该值会将阴影放置到元素的右下方
            <TextBlock FontSize="20" Margin="5" >
                <TextBlock.Effect>
                    <DropShadowEffect/>
                </TextBlock.Effect>
                <TextBlock.Text>basic dropshadow</TextBlock.Text>
            </TextBlock>
            <TextBlock FontSize="20" Margin="5" >
                <TextBlock.Effect>
                    <DropShadowEffect Color="SlateBlue"/>
                </TextBlock.Effect>
                <TextBlock.Text>light blue dropshadow</TextBlock.Text>
            </TextBlock>
            <TextBlock FontSize="20" Foreground="White"  Margin="5" >
                <TextBlock.Effect>
                    <DropShadowEffect BlurRadius="15"/>
                </TextBlock.Effect>
                <TextBlock.Text>blurred dropshadow with white text</TextBlock.Text>
            </TextBlock>
            <TextBlock FontSize="20" Foreground="Magenta" Margin="5" >
                <TextBlock.Effect>
                    <DropShadowEffect ShadowDepth="0"/>
                </TextBlock.Effect>
                <TextBlock.Text>close dropshadow</TextBlock.Text>
            </TextBlock>
            <TextBlock FontSize="20" Foreground="LimeGreen" Margin="5" >
                <TextBlock.Effect>
                    <DropShadowEffect ShadowDepth="25"/>
                </TextBlock.Effect>
                <TextBlock.Text>distant dropshadow</TextBlock.Text>
            </TextBlock>

在这里插入图片描述

有时候可通过将元素添加到高层的容器中来模拟多个效果,例如,为TextBlock元素使用阴影效果,然后将其放入使用效果的stackpanel面板中。大多数情况下,应避免这种变通方法,因为这种方法会成倍增加渲染工作量并会降低性能。相反,应当查找能够完成所有内容的单个效果。

ShaderEffect类

ShaderEffect类没有提供就绪的效果。相反,它是一个抽象类,可继承该类以创建自己的自定义像素着色器。通过使用ShaderEffect类(或从该类派生的自定义效果),可实现更多的效果,而不仅局限于模糊和阴影。

可能与你的预期相反,实现像素着色器的逻辑不是直接在效果类中使用C#代码编写的,相反,像素着色器是用高级着色语言编写的,该语言是Microsoft DirectX的一部分。

将HLSL文件编译成.ps文件,就可以在项目中使用它了。需要将文件添加到已有的WPF项目中,在解决方案中选择该文件,并将它的生成方式属性设置为Resource。最后要创建一个继承自ShaderEffect的自定义类并使用该资源。

    public class customeEffect : ShaderEffect
    {
        public customeEffect()
        {
            Uri uri = new Uri("Effect.ps", UriKind.Relative);

            PixelShader = new PixelShader();
            PixelShader.UriSource = uri;
        }
    }

现在创建自定义效果类的一个实例,应用它设置元素的Effect属性:

            <Image>
                <Image.Effect>
                    <local:customeEffect></local:customeEffect>
                </Image.Effect>
            </Image>

除非是非常专业的图形开发人员,否则获取更高级像素着色器的最好方法不是自己编写HLSL代码。相反,应当查找现成的HLSL例子,甚至更好的使用已经提供了自定义效果类的第三方WPF组件。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/90270.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

飞天使-k8s基础组件分析-安全

文章目录 名称空间解释访问kubernetes API的控制RBAC的介绍 kubeconfig用户的创建集群默认角色 给组创建授权针对pod配置服务账户参考文档 名称空间解释 名字是啥&#xff1f; 答&#xff1a;集群中每个对象的名称对于该类型的资源都是唯一的。并且每一个对象在整个集群中也有…

【数据备份、恢复、迁移与容灾】上海道宁与云祺科技为企业用户提供云数据中心容灾备份解决方案

云祺容灾备份系统支持 主流虚拟化环境下的虚拟机备份 提供对云基础设施 云架构平台以及 应用系统的全方位数据保护 云祺容灾备份系统规范功能 增强决策能力 高效恢复数据至可用状态 有效降低恢复成本 更大限度减少业务中断时间 保障业务可访问性 开发商介绍 成都云祺…

扩散模型实战(六):Diffusers DDPM初探

推荐阅读列表&#xff1a; 扩散模型实战&#xff08;一&#xff09;&#xff1a;基本原理介绍 扩散模型实战&#xff08;二&#xff09;&#xff1a;扩散模型的发展 扩散模型实战&#xff08;三&#xff09;&#xff1a;扩散模型的应用 扩散模型实战&#xff08;四&#xf…

idea 对JavaScript进行debug调试

文章目录 1.新增 JavaScript Debug 配置2.配置访问地址3.访问url. 打断点测试 前言 : 工作中接手别人的前端代码没有注释&#xff0c;看浏览器的network或者console切来切去&#xff0c;很麻烦&#xff0c;可以试试idea自带的javscript debug功能。 1.新增 JavaScript Debug 配…

【网络安全】防火墙知识点全面图解(三)

本系列文章包含&#xff1a; 【网络安全】防火墙知识点全面图解&#xff08;一&#xff09;【网络安全】防火墙知识点全面图解&#xff08;二&#xff09;【网络安全】防火墙知识点全面图解&#xff08;三&#xff09; 防火墙知识点全面图解&#xff08;三&#xff09; 39、什…

基于Spring Boot的智慧团支部建设网站的设计与实现(Java+spring boot+MySQL)

获取源码或者论文请私信博主 演示视频&#xff1a; 基于Spring Boot的智慧团支部建设网站的设计与实现&#xff08;Javaspring bootMySQL&#xff09; 使用技术&#xff1a; 前端&#xff1a;html css javascript jQuery ajax thymeleaf 微信小程序 后端&#xff1a;Java sp…

ChatGPT⼊门到精通(1):ChatGPT 是什么

⼀、直观感受 1、公司 OpenAI&#xff08;美国&#xff09; 2、官⽅⽹站 3、登录ChatGPT ![在这里插入图片描述](https://img-blog.csdnimg.cn/26901096553a4ba0a5c88c49b2601e6a.png 填⼊帐号、密码&#xff0c;点击登录。登录成功&#xff0c;如下 3、和ChatGPT对话 开始…

【论文笔记】Planning and Decision-Making for Autonomous Vehicles

文章目录 Summary1. INTRODUCTION2. MOTION PLANNING AND CONTROL2.1. Vehicle Dynamics and Control2.2. Parallel Autonomy2.3. Motion Planning for Autonomous Vehicles 3. INTEGRATED PERCEPTION AND PLANNING3.1. From Classical Perception to Current Challenges in Ne…

APP上线为什么要提前部署安全产品呢?

一般平台刚上线或者日活跃量比较高的时候&#xff0c;很容易成为攻击者的目标&#xff0c;服务器如果遭遇黑客攻击&#xff0c;资源耗尽会导致平台无法访问&#xff0c;业务也无法正常开展&#xff0c;服务器一旦触发黑洞机制&#xff0c;就会被拉进黑洞很长一段时间&#xff0…

激活函数总结(十九):激活函数补充(ISRU、ISRLU)

激活函数总结&#xff08;十九&#xff09;&#xff1a;激活函数补充 1 引言2 激活函数2.1 Inverse Square Root Unit &#xff08;ISRU&#xff09;激活函数2.2 Inverse Square Root Linear Unit (ISRLU)激活函数 3. 总结 1 引言 在前面的文章中已经介绍了介绍了一系列激活函…

Midjourney 完整版教程(从账号注册到设计应用)

目录 一、Midjourney 介绍 二、Midjourney 的AI出图示例 三、手把手教你上手Midjourney 1、账号&初始化 1.1 账号注册登录 1.2 账号付费 1.3 账号初始化 2、Midjourney的基础设置 3、Midjourney 出图步骤。 (一)直接描述出图 (二)垫图生图。 4、Midjourney的…

Android kotlin 跳转手机热点开关页面和判断热点是否打开

Android kotlin 跳转手机热点开关页面和判断热点是否打开 判断热点是否打开跳转手机热点开关页面顺带介绍一些其他常用的设置页面跳转 其他热点的一些相关知识Local-only hotspot 参考 判断热点是否打开 网上方法比较多&#xff0c;我这边使用了通过WifiManager 拿反射的getWi…

咸虾米之一些快捷方式的操作,一行方块的左右滑动,方块在一区域内的任意移动

由于本着只学习微信小程序的目的&#xff0c;上面的几篇博文都是跟着黑马程序的课程走的&#xff01;后面的就讲解uni-app的实验呢&#xff01;一个人的精力是有限的&#xff0c;于是换了们课程继续深造微信小程序&#xff01;&#xff01;&#xff01; 以下是在 .wxml中的一些…

More Effective C++学习笔记(4)

目录 条款16&#xff1a;谨记 80 - 20 法则条款17&#xff1a;考虑使用lazy evaluation&#xff08;缓式评估&#xff09;条款18&#xff1a;分期摊还预期的计算成本条款19&#xff1a;了解临时对象来源条款20&#xff1a;协助完成 “ 返回值优化 ”条款21&#xff1a;利用重载…

【C++心愿便利店】No.2---函数重载、引用

文章目录 前言&#x1f31f;一、函数重载&#x1f30f;1.1.函数重载概念&#x1f30f;1.2.C支持函数重载的原理 -- 名字修饰 &#x1f31f;二、引用&#x1f30f;2.1.引用的概念&#x1f30f;2.2.引用特性&#x1f30f;2.3.常引用&#x1f30f;2.4.使用场景&#x1f30f;2.5.传…

[当前就业]2023年8月25日-计算机视觉就业现状分析

计算机视觉就业现状分析 前言&#xff1a;超越YOLO&#xff1a;计算机视觉市场蓬勃发展 如今&#xff0c;YOLO&#xff08;You Only Look Once&#xff09;新版本的发布周期很快&#xff0c;每次迭代的性能都优于其前身。每 3 到 4 个月就会推出一个升级版 YOLO 变体&#xf…

腾讯云服务器价格表大全_轻量服务器_CVM云服务器报价明细

腾讯云服务器租用费用表&#xff1a;轻量应用服务器2核2G4M带宽112元一年&#xff0c;540元三年、2核4G5M带宽218元一年&#xff0c;2核4G5M带宽756元三年、云服务器CVM S5实例2核2G配置280.8元一年、GPU服务器GN10Xp实例145元7天&#xff0c;腾讯云服务器网长期更新腾讯云轻量…

【线程池】线程池拒绝策略还有这个大坑(二)

目录 踩坑代码 后果展示 原因 小结 概要 上文我们聊了聊阻塞队列&#xff0c;有需要的小伙伴可以去瞅瞅【线程池】换个姿势来看线程池中不一样的阻塞队列&#xff08;一&#xff09;_走了一些弯路的博客-CSDN博客 这波我们一起来研究下线程池的拒绝策略。 你肯定要说了&a…

【ArcGIS微课1000例】0071:普通最小二乘法 (OLS)回归分析案例

严重声明:本文来自专栏《ArcGIS微课1000例:从点滴到精通》,为CSDN博客专家刘一哥GIS原创,原文及专栏地址为:(https://blog.csdn.net/lucky51222/category_11121281.html),谢绝转载或爬取!!! 文章目录 一、空间自回归模型二、ArcGIS普通最小二乘法回归(OLS)一、空间自…

拒绝摆烂!C语言练习打卡第六天

&#x1f525;博客主页&#xff1a;小王又困了 &#x1f4da;系列专栏&#xff1a;每日一练 &#x1f31f;人之为学&#xff0c;不日近则日退 ❤️感谢大家点赞&#x1f44d;收藏⭐评论✍️ 目录 一、选择题 &#x1f4dd;1.第一题 &#x1f4dd;2.第二题 &#x1f4d…