首页 > 其他分享 >创建一个点击后背景有扩散效果的按钮

创建一个点击后背景有扩散效果的按钮

时间:2024-11-29 09:58:28浏览次数:7  
标签:return 自定义 object value 点击 按钮 扩散 size

文章目录

概要

创建一个点击后背景有扩散效果的按钮。

效果展示

按钮点击后边框扩散效果

主要步骤

1、自定义控件样式
2、自定义Convert
3、使用ScaleTransform

主要代码

  • 按钮自定义样式
<Style x:Key="buttonStyle" TargetType="Button">
    <Setter Property="Template">
        <Setter.Value>
            <ControlTemplate TargetType="Button">
                <Canvas x:Name="canvas">
                    <Border x:Name="border"
                            BorderBrush="#18A058"
                            BorderThickness="1"
                            CornerRadius="3"
                            Background="#18A058"
                            Width="{TemplateBinding Width}"
                            Height="{TemplateBinding Height}"
                            Opacity="0">
                        <Border.RenderTransform>
                            <ScaleTransform x:Name="st"
                                            CenterX="{Binding ElementName=canvas,Path=ActualWidth,Converter={StaticResource bcc} }"
                                            CenterY="{Binding ElementName=canvas,Path=ActualHeight,Converter={StaticResource bcc}}" />
                        </Border.RenderTransform>
                    </Border>
                    <Border
                        Width="{Binding ElementName=canvas,Path=ActualWidth}"
                        Height="{Binding ElementName=canvas,Path=ActualHeight}"
                        BorderBrush="{TemplateBinding BorderBrush}"
                        BorderThickness="{TemplateBinding BorderThickness}"
                        CornerRadius="3"
                        Margin="0"
                        Background="{TemplateBinding Background}">
                        <TextBlock Text="{TemplateBinding Content}"
                                    Margin="0"
                                    HorizontalAlignment="Center"
                                    VerticalAlignment="Center"
                                    Foreground="{TemplateBinding Foreground}"/>
                    </Border>
                </Canvas>
                <ControlTemplate.Triggers>
                    <EventTrigger RoutedEvent="Button.Click">
                        <BeginStoryboard>
                            <Storyboard FillBehavior="Stop">
                                <DoubleAnimation Storyboard.TargetName="border" Storyboard.TargetProperty="Opacity" From="0.6" To="0" Duration="0:0:0.3" />
                                <DoubleAnimation Storyboard.TargetName="st" Storyboard.TargetProperty="ScaleX" To="1.2" Duration="0:0:0.3" />
                                <DoubleAnimation Storyboard.TargetName="st" Storyboard.TargetProperty="ScaleY" To="1.2" Duration="0:0:0.3" />
                            </Storyboard>
                        </BeginStoryboard>
                    </EventTrigger>
                </ControlTemplate.Triggers>
            </ControlTemplate>
        </Setter.Value>
    </Setter>
</Style>
  • Convert代码
public class ButtonCenterConvert : IValueConverter
{
    public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
    {
        if (value is double size)
        {
            return size / 2;
        }
        return 0;
    }

    public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
    {
        if (!(value is double size))
        {
            return 0;
        }
        else
        {
            return (double)value * 2;
        }
    }
}
  • 创建按钮并引用Style
<Window x:Class="WpfTest.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
        xmlns:local="clr-namespace:WpfTest"
        Name="win"
        mc:Ignorable="d"
        Title="MainWindow" Height="450" Width="800">
    <Window.Resources>
        <local:ButtonCenterConvert x:Key="bcc"/>
        <Style x:Key="buttonStyle" TargetType="Button">
            <Setter Property="Template">
                <Setter.Value>
                    <ControlTemplate TargetType="Button">
                        <Canvas x:Name="canvas">
                            <Border x:Name="border"
                                    BorderBrush="#18A058"
                                    BorderThickness="1"
                                    CornerRadius="3"
                                    Background="#18A058"
                                    Width="{TemplateBinding Width}"
                                    Height="{TemplateBinding Height}"
                                    Opacity="0">
                                <Border.RenderTransform>
                                    <ScaleTransform x:Name="st"
                                                    CenterX="{Binding ElementName=canvas,Path=ActualWidth,Converter={StaticResource bcc} }"
                                                    CenterY="{Binding ElementName=canvas,Path=ActualHeight,Converter={StaticResource bcc}}" />
                                </Border.RenderTransform>
                            </Border>
                            <Border
                                Width="{Binding ElementName=canvas,Path=ActualWidth}"
                                Height="{Binding ElementName=canvas,Path=ActualHeight}"
                                BorderBrush="{TemplateBinding BorderBrush}"
                                BorderThickness="{TemplateBinding BorderThickness}"
                                CornerRadius="3"
                                Margin="0"
                                Background="{TemplateBinding Background}">
                                <TextBlock Text="{TemplateBinding Content}"
                                           Margin="0"
                                           HorizontalAlignment="Center"
                                           VerticalAlignment="Center"
                                           Foreground="{TemplateBinding Foreground}"/>
                            </Border>
                        </Canvas>
                        <ControlTemplate.Triggers>
                            <EventTrigger RoutedEvent="Button.Click">
                                <BeginStoryboard>
                                    <Storyboard FillBehavior="Stop">
                                        <DoubleAnimation Storyboard.TargetName="border" Storyboard.TargetProperty="Opacity" From="0.6" To="0" Duration="0:0:0.3" />
                                        <DoubleAnimation Storyboard.TargetName="st" Storyboard.TargetProperty="ScaleX" To="1.2" Duration="0:0:0.3" />
                                        <DoubleAnimation Storyboard.TargetName="st" Storyboard.TargetProperty="ScaleY" To="1.2" Duration="0:0:0.3" />
                                    </Storyboard>
                                </BeginStoryboard>
                            </EventTrigger>
                        </ControlTemplate.Triggers>
                    </ControlTemplate>
                </Setter.Value>
            </Setter>
        </Style>
    </Window.Resources>
    <Grid>
        <Button x:Name="growButton" Width="200" Height="60" Content="Click Me" Foreground="#333639" BorderBrush="#E0E0E6" Background="#FFF" Style="{StaticResource buttonStyle}"/>
    </Grid>
</Window>

小结

可参考这种模式自定义更多样式。

标签:return,自定义,object,value,点击,按钮,扩散,size
From: https://blog.csdn.net/Pawn_lixl/article/details/144053853

相关文章

  • 帝国CMS内容页模板点击改变字体大小的js代码
    加入JS代码:<scripttype="text/javascript">functionFontZoom(fsize){varctext=document.getElementById("news");ctext.style.fontSize=fsize+"px";}</script>定制框架:<divid="news"&......
  • Python 使用shapely、geopandas、matplotlib绘制全国各个省份2023年GDP热力图,鼠标点击
    以下是一个示例代码,用于在使用matplotlib和geopandas绘制地图并设置区域后,当鼠标点击地图上的某个区域时,返回该区域的名称。首先,确保你已经安装了matplotlib、geopandas和descartes库(descartes库用于在matplotlib中绘制地理空间数据)。如果没有安装,可以通过pipinstallmatplot......
  • Android按键点击事件三种实现方法
    1. 在xml文件中为Button添加android:onclick属性由于没有onclick这个函数,onclick下面会提示红色波浪线错误,然后单击一下"onclick"按住键盘上Alt+Enter键,选择在activity中生成函数publicvoidonclick(Viewview){Toast.makeText(this,"方法1点击按键",T......
  • 银河麒麟桌面系统——桌面鼠标变成x,窗口无关闭按钮的解决办法
    银河麒麟桌面系统——桌面鼠标变成x,窗口无关闭按钮的解决办法1、支持环境2、详细操作说明步骤1:用root账户登录电脑步骤2:导航到kylin-wm-chooser目录步骤3:编辑default.conf文件步骤4:重启电脑3、结语......
  • keil版本切换,while(1)debug只执行一次,仿真发现连续点击多次全速运行才可以进入main
    while(1)里的程序只执行一次,如果while(1)里的所有代码在debug都可以打断点,那么while(1)里的程序不运行就说明卡在那个运行还没出来。如果有的地方不可以打断点就说明keil优化等级的问题导致在debug运行不下去。  keil下载完程序后,仿真发现连续点击多次全速运行才可以进入main,原因是......
  • vue3 带图片的提交按钮
    一、界面元素<el-formv-loading="isLoading":model="editForm"ref="ruleFormRef":rules="rules"label-width="120px"><el-row><el-col:span="12">......
  • 0032 点击按钮显示文本框-初级程序-极语言教程
    //窗体代码:整数窗体,文本框,按钮2,按钮3,按钮4;程序资源24,"清单.xml";程序段加载窗体整数左=(桌面.宽-625)>>1,上=(桌面.高-497)>>1;窗体=创建窗口($200,程序.名称,"极语言示例0032",$10CF0064,左,上,625,497,0,0,0,0);文本框=创建窗口($200,"Edit","文本框",$500100......
  • 移动端点击事件为什么会有延迟?延迟多长时间?有哪些方法可以解决?
    移动端点击事件的延迟,主要是因为浏览器需要区分用户是单击还是双击等其他手势。这段延迟通常是300ms左右,但具体时间取决于浏览器和设备。以下是造成延迟的原因和一些解决方案:原因:双击缩放(DoubleTaptoZoom):这是最主要的原因。移动浏览器为了识别双击缩放手势,会在用户第一......
  • matlab点击实时绘制bezier曲线
    贝塞尔曲线的原理贝塞尔曲线是通过一组控制点定义的参数曲线。曲线不会直接穿过这些点,但这些点会影响曲线的形状。控制点确定了曲线的弯曲程度和方向。贝塞尔曲线的数学公式基于伯恩斯坦多项式(BernsteinPolynomials)。对于一个n次的贝塞尔曲线,它由n+1个控制点​定义。曲线......
  • Vue3 - 详细实现移动端H5网页调用摄像头拍照功能,微信公众号网页h5页面打开本地摄像头
    前言PC网站端,请访问这篇文章。在vue3手机移动端开发中,详解H5页面/微信公众号网页调用浏览器摄像头并拍照完整示例,在手机浏览器上开启摄像头并拍照上传服务器或保存到本地功能(实时预览使用图片临时路径或base64数据),切换转换前置摄像头与后置摄像头,vue3手机H5打开摄像......