C# WPF 自定义按钮的方法
作者:louzi 发布时间:2021-08-30 23:42:11
标签:c#,wpf,自定义,按钮
本文介绍WPF一种自定义按钮的方法。
实现效果
使用图片做按钮背景;
自定义鼠标进入时效果;
自定义按压效果;
自定义禁用效果
实现效果如下图所示:
实现步骤
创建CustomButton.cs,继承自Button;
创建一个资源文件ButtonStyles.xaml;
在资源文件中设计按钮的Style;
在CustomButton.cs中添加Style中需要的依赖属性;
在程序中添加资源并引用(为了方便在不同的程序中引用自定义按钮,自定义按钮放在独立的类库中,应用程序中进行资源合并即可)。
示例代码
// ButtonStyles.xaml
<Style x:Key="CustomButton" TargetType="{x:Type local:CustomButton}">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type local:CustomButton}">
<Grid x:Name="container">
<Image Width="{TemplateBinding Width}" Height="{TemplateBinding Height}"
Source="{Binding ButtonImage,RelativeSource={RelativeSource Mode=TemplatedParent}}">
<Image.RenderTransformOrigin>
<Point X="0.5" Y="0.5"/>
</Image.RenderTransformOrigin>
<Image.RenderTransform>
<ScaleTransform x:Name="scaletrans" ScaleX="1" ScaleY="1"/>
</Image.RenderTransform>
</Image>
</Grid>
<ControlTemplate.Triggers>
<Trigger Property="IsEnabled" Value="False">
<Setter Property="Opacity" Value="0.5" TargetName="container"/>
</Trigger>
<Trigger Property="IsMouseOver" Value="True">
<Setter Property="Background" Value="#2c000000" TargetName="container"/>
</Trigger>
<Trigger Property="IsPressed" Value="True">
<Trigger.EnterActions>
<BeginStoryboard>
<Storyboard>
<DoubleAnimation Storyboard.TargetName="scaletrans" Storyboard.TargetProperty="(ScaleTransform.ScaleX)"
To="0.8" Duration="0:0:0.15" AutoReverse="True"/>
<DoubleAnimation Storyboard.TargetName="scaletrans" Storyboard.TargetProperty="(ScaleTransform.ScaleY)"
To="0.8" Duration="0:0:0.15" AutoReverse="True"/>
</Storyboard>
</BeginStoryboard>
</Trigger.EnterActions>
</Trigger>
</ControlTemplate.Triggers>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
// CustomButton.cs
public class CustomButton : Button
{
public ImageSource ButtonImage
{
get { return (ImageSource)GetValue(ButtonImageProperty); }
set { SetValue(ButtonImageProperty, value); }
}
public static readonly DependencyProperty ButtonImageProperty =
DependencyProperty.Register("ButtonImage", typeof(ImageSource), typeof(CustomButton),
new FrameworkPropertyMetadata(null, FrameworkPropertyMetadataOptions.AffectsRender));
}
// App.xaml 合并资源
<Application.Resources>
<ResourceDictionary>
<ResourceDictionary.MergedDictionaries>
<ResourceDictionary Source=".../ButtonStyles.xaml"/>
</ResourceDictionary.MergedDictionaries>
</ResourceDictionary>
</Application.Resources>
// view.xaml 使用
<Grid>
<customcontrols:CustomButton Width="48" Height="48"
Style="{StaticResource CustomButton}" ButtonImage="/Louzi.Paint;component/Images/Toolbar/write.png"/>
</Grid>
来源:https://www.cnblogs.com/louzixl/p/14454750.html


猜你喜欢
- 前言Redis是一个开源的Key-Value数据缓存,和Memcached类似。Redis多种类型的value,包括string(字符串)、
- 目录说明使用常见问题No such instance field: 'logger2'说明logback作为log4j的替代
- 一、概述1、WebRequest:对统一资源标识符 (URI) 发出请求。 这是一个 abstract 类。WebRequest的派生类:P
- 前言先放一个官网吧,其实本案例就是根据官网案例来的,只是进行了修改配置。Mybatis-plus官网一、搭建一个springboot项目&n
- 本文以实例讲述了C#简单的向量用法,主要包括重载运算符>:以向量长度判断是否为真、重载运算符!=、<、<=等,具体实现代码
- 前两天朋友问我,有没有使用过StackExchange.Redis,问我要个封装类,由于之前都是使用ServiceStack.Redis,由
- 本文实例为大家分享了Unity3D实现物体排成弧行的具体代码,供大家参考,具体内容如下一般用在Pico、HTC、DP等VR设备中效果:完整代
- 一、JDK * Java 在 java.lang.reflect 包中有自己的代理支持,该类(Proxy.java)用于动态生成代理类,只
- 本文实例讲述了Spring Bean的初始化和销毁。分享给大家供大家参考,具体如下:一 点睛在开发过程中,经常遇到在Bean使用之前或者之后
- 1. xml文件中加入自定义 搜索view<com.etoury.etoury.ui.view.IconCenterEditText
- 继续我们的源码解析,上一篇文章我们介绍了Activity的启动流程,一个典型的场景就是Activity a 启动了一个Activity b,
- 这里给大家带来的是动态webservice调用接口并读取解析返回结果的具体示例,非常的简单,注释也很详细,小伙伴们可以参考下。using S
- 本文实例讲述了C#实现的SQL备份与还原功能。分享给大家供大家参考,具体如下://记得加 folderBrowserDialog1 open
- Class类中获取方法:public Method[] getMethods();//获取包括自身和继承(实现)过来的所有的public方法
- 本篇是对安卓菜单使用编程方式实现,当然可以使用XML的方式完成同样的功能,基本Java和C#写法都是一致的,所以使用XML的方式在本篇中使用
- 1、利用延迟队列延时队列,第一他是个队列,所以具有对列功能第二就是延时,这就是延时对列,功能也就是将任务放在该延时对列中,只有到了延时时刻才
- 本文实例讲述了Java Lambda表达式与匿名内部类的联系和区别。分享给大家供大家参考,具体如下:一 点睛Lambda表达式与匿名内部类存
- 本文实例为大家分享了C语言实现中国象棋的具体代码,供大家参考,具体内容如下运行截图实现思路老套路,二维数组存储棋盘,宏定义各种棋子,每次棋子
- 题目:将一个数组逆序输出。代码:import java.util.*;public class lianxi31 {public stati
- Feign调用服务Headers传参在使用springcloud中经常会出现个服务调用,一般情况下会在Headers加上token的验证,那