[WPF] 实现一个很久以前流行的按钮样式


偶尔看到这个按钮样式,用 WPF 模仿一下。这个按钮样式好像好几年前看到过,已经不记得怎么称呼了。

实现起来还挺简单的,首先用 OpacityMask 和 RadialGradientBrush 实现一个高光的边框:

<Border x:Name="HighlightBorder"
        BorderBrush="White"
        BorderThickness="1"
        CornerRadius="4">
    <Border.OpacityMask>
        <RadialGradientBrush x:Name="Brush" Center=".3,.0" GradientOrigin=".3,.0" RadiusX=".2" RadiusY=".2">
            <GradientStop Color="#8000" />
            <GradientStop Offset=".7" Color="#3000" />
            <GradientStop Offset="1" Color="#1000" />
        </RadialGradientBrush>
    </Border.OpacityMask>
</Border>
<ContentPresenter x:Name="contentPresenter"
                  Margin="{TemplateBinding Padding}"
                  HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}"
                  VerticalAlignment="{TemplateBinding VerticalContentAlignment}"
                  Focusable="False"
                  RecognizesAccessKey="True"
                  SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}" />

然后在上面放一个半透明的遮罩层:

<Rectangle x:Name="rectangle"
           RadiusX="4"
           RadiusY="4">
    <Rectangle.Fill>
        <LinearGradientBrush StartPoint="0.5,0" EndPoint="0.5,1">
            <GradientStop x:Name="Stop1" Offset=".5" Color="#10FFFFFF" />
            <GradientStop x:Name="Stop2" Offset=".5" Color="#0000" />
        </LinearGradientBrush>
    </Rectangle.Fill>
</Rectangle>

下一步,在外面套一个 Border,Border 的边框为一个像素,并且应用上背景色:

<Border x:Name="border"
        Background="{TemplateBinding Background}"
        BorderBrush="{TemplateBinding BorderBrush}"
        BorderThickness="{TemplateBinding BorderThickness}"
        CornerRadius="4"
        SnapsToDevicePixels="true">

最后,在底层放一个半透明的层,添加一点立体感:

<Border Margin="0,0,0,-1"
        Background="{TemplateBinding Background}"
        BorderBrush="{TemplateBinding BorderBrush}"
        CornerRadius="5"
        Opacity=".3"
        SnapsToDevicePixels="true">
    <Rectangle Margin="0,4,0,0"
               Fill="White"
               Opacity=".5"
               RadiusX="5"
               RadiusY="5" />
</Border>

应用上各种颜色,成果如下:

最后再 MouseOver 和 Pressed 状态对遮罩层做手脚,实现了简单的状态变化:

源码: https://github.com/DinoChan/wpf_design_and_animation_lab

文章来源:https://www.cnblogs.com/dino623/p/wpf_highlight_button.html

版权声明:本文为YES开发框架网发布内容,转载请附上原文出处连接
管理员
上一篇:在Winform项目和Web API的.NetCore项目中使用Serilog 来记录日志信息
下一篇:windows平台的分布式微服务解决方案(7)--IDataAccess工具介绍(数据访问)
评论列表

发表评论

评论内容
昵称:
关联文章

[WPF] 实现一个以前流行按钮样式
[WPF] 抄一个 CSS3 实现按钮
[WPF] 实现 WPF Inner Shadow
WPF开发随笔收录-带递增递减按钮TextBox
[WPF] 用 Effect 实现线条光影效果
WPF_15_格式化绑定数据
使用 WPF 做个 PowerPoint 系列 基于 OpenXML 解析实现 PPT 文本描边效果
[WPF] 实现两个任天堂 Switch 加载动画
[WPF] 使用 Shazzam Shader Editor 编写一个 Lighten Effect
dotnetCampus.UITest.WPF 一个支持中文用例界面单元测试框架
用 WinUI 3 开发了一个摸鱼应用
[WPF] 用 OpacityMask 模仿 UWP Text Shimmer 动画
YARP+AgileConfig 5分钟实现一个支持配置热更新代理网关
白象食品是怎么样一个企业
jQuery动态添加设置.active属性实现当前选择节点样式
C# 编写一个小而快 Windows 动态桌面
DevExpress表格GridControl添加操作列单元格添加图片按钮并且实现点击链接URL跳转浏览器
客户端实现
css样式排除某个属性,或者类样式名称
走进WPF之MVVM完整案例

联系我们
联系电话:15090125178(微信同号)
电子邮箱:garson_zhang@163.com
站长微信二维码
微信二维码