C# WPF 自定义按钮的方法
作者:louzi 时间:2021-08-30 23:42:11
本文介绍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
标签:c#,wpf,自定义,按钮
0
投稿
猜你喜欢
C#调用WebService实例开发
2022-11-21 22:51:08
Android获取点击屏幕的位置坐标
2023-12-14 21:18:31
深入理解C#序列化与反序列化的详解
2022-06-23 05:11:58
WindowsForm实现警告消息框的实例代码
2023-05-25 00:00:54
Java+element实现excel的导入和导出
2022-07-31 12:45:53
C#检查指定对象是否存在于ArrayList集合中的方法
2023-07-28 00:45:17
Java实现指定线程执行顺序的三种方式示例
2021-08-16 15:11:34
springboot中的静态资源加载顺序优先级
2023-08-24 11:12:31
Android完整Socket解决方案
2023-12-22 14:42:40
springmvc的文件保存方法详解
2023-06-12 00:33:43
Map集合之HashMap的使用及说明
2022-07-23 15:56:56
浅谈单例模式和线程安全问题
2023-11-25 06:27:34
Springboot引用外部配置文件的方法步骤
2022-06-14 13:29:35
JavaWeb工程中集成YMP框架快速上手
2023-11-24 12:15:12
浅谈SpringBoot @Autowired的两种注入方式
2021-06-28 06:08:34
C#引用类型转换的常见方式总结
2022-03-02 16:53:58
Java毕业设计实战之健身器材商城系统的实现
2022-12-18 01:39:56
如何在C# 中查找或结束程序域中的主、子进程
2023-06-14 20:00:41
Struts2相关的面试题整理分享
2022-04-06 08:02:20
Java泛型中<?>和<T>的区别浅析
2023-11-25 05:20:09