当前位置: 首页 > news >正文

WPF制作带图标和文字的按钮模板(通过附加属性实现)

1.界面模板代码部分

    <Window.Resources><Style x:Key="IconButton" TargetType="Button"><Setter Property="Template"><Setter.Value><ControlTemplate TargetType="Button"><Border x:Name="border"BorderBrush="{TemplateBinding BorderBrush}"  BorderThickness="{TemplateBinding BorderThickness}"  Background="{TemplateBinding Background}"  Padding="{TemplateBinding Padding}"SnapsToDevicePixels="True"CornerRadius="8,8,8,8"><Grid><Grid.ColumnDefinitions><ColumnDefinition Width="Auto"/><ColumnDefinition Width="*"/></Grid.ColumnDefinitions><Image Grid.Column="0" Source="{Binding RelativeSource={RelativeSource TemplatedParent}, Path=(localModel:ButtonExtensions.IconPath)}" Width="16" Height="16" Margin="4,0"/><ContentPresenter Grid.Column="1" x:Name="contentPresenter" ContentTemplate="{TemplateBinding ContentTemplate}"   Content="{TemplateBinding Content}"   ContentStringFormat="{TemplateBinding ContentStringFormat}"   HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}"   VerticalAlignment="{TemplateBinding VerticalContentAlignment}"   SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}"   RecognizesAccessKey="True"   Margin="{TemplateBinding Padding}"/></Grid></Border><ControlTemplate.Triggers><Trigger Property="IsMouseOver" Value="True"><Setter TargetName="border" Property="Background" Value="#7DB8FF"/></Trigger><Trigger Property="IsPressed" Value="True"><Setter TargetName="border" Property="Background" Value="#6CADFF "/></Trigger><Trigger Property="IsEnabled" Value="False"><Setter Property="Opacity" TargetName="border" Value="0.6"/></Trigger></ControlTemplate.Triggers></ControlTemplate></Setter.Value></Setter></Style></Window.Resources>

2.在工程中添加类,用于编辑附加属性,主要是为了设置图标地址。下面为附加属性代码

//通过附加属性来设置图标的路径public static class ButtonExtensions{public static readonly DependencyProperty IconPathProperty = DependencyProperty.RegisterAttached("IconPath", typeof(string), typeof(ButtonExtensions), new PropertyMetadata(null));public static string GetIconPath(DependencyObject obj){return (string)obj.GetValue(IconPathProperty);}public static void SetIconPath(DependencyObject obj, string value){obj.SetValue(IconPathProperty, value);}}

3.界面按钮代码实现代码,如下

<Button Grid.Row="1" Grid.Column="0" x:Name="BtnLoadImage" 
Style="{StaticResource IconButton}" 
localModel:ButtonExtensions.IconPath="pack://application:,,,/Resources/OpenPath.png" 
Width="100" Height="40" 
Content="Load Image" 
Background="#6CADFF" BorderBrush="Transparent"/>

相关文章:

  • 3、设计模式之工厂模式2(Factory)
  • Ubuntu 20.04 系统如何优雅地安装NCL?
  • web 课程
  • Linux-新手小白速秒Hadoop集群全生态搭建(图文混编超详细)
  • 用户数据的FLASH存储与应用(FPGA架构)
  • rosetta error: failed to open elf at /lib64/ld-linux-x86-64.so.2
  • HarmonyOS NEXT应用开发—状态栏显隐变化
  • 嵌入式学习39-程序创建数据库及查找
  • 24计算机考研调剂 | 太原科技大学
  • Xcode 15.3 Archive失败
  • python-0008-修改django数据库为mysql
  • Gitlab光速发起Merge Request
  • 国外visa卡怎么办理,可充ChatGPTPLUS、Claude、Midjourney
  • Node.js的事件驱动模型(非阻塞I/O)
  • LeetCode 面试经典150题 27.移除元素
  • [ JavaScript ] 数据结构与算法 —— 链表
  • 【RocksDB】TransactionDB源码分析
  • eclipse的离线汉化
  • ES6--对象的扩展
  • jQuery(一)
  • MySQL-事务管理(基础)
  • React 快速上手 - 06 容器组件、展示组件、操作组件
  • React-flux杂记
  • 订阅Forge Viewer所有的事件
  • 快速构建spring-cloud+sleuth+rabbit+ zipkin+es+kibana+grafana日志跟踪平台
  • 深度解析利用ES6进行Promise封装总结
  • 思否第一天
  • 小程序、APP Store 需要的 SSL 证书是个什么东西?
  • 用简单代码看卷积组块发展
  • 1.Ext JS 建立web开发工程
  • 3月27日云栖精选夜读 | 从 “城市大脑”实践,瞭望未来城市源起 ...
  • 交换综合实验一
  • ​iOS实时查看App运行日志
  • ​LeetCode解法汇总2583. 二叉树中的第 K 大层和
  • ​用户画像从0到100的构建思路
  • ### Error querying database. Cause: com.mysql.jdbc.exceptions.jdbc4.CommunicationsException
  • #DBA杂记1
  • $分析了六十多年间100万字的政府工作报告,我看到了这样的变迁
  • (1)(1.9) MSP (version 4.2)
  • (C#)获取字符编码的类
  • (day6) 319. 灯泡开关
  • (动手学习深度学习)第13章 计算机视觉---图像增广与微调
  • (附源码)node.js知识分享网站 毕业设计 202038
  • (附源码)spring boot智能服药提醒app 毕业设计 102151
  • (附源码)计算机毕业设计ssm高校《大学语文》课程作业在线管理系统
  • (入门自用)--C++--抽象类--多态原理--虚表--1020
  • (实战篇)如何缓存数据
  • (一)SpringBoot3---尚硅谷总结
  • (一)使用IDEA创建Maven项目和Maven使用入门(配图详解)
  • (轉貼) 蒼井そら挑戰筋肉擂台 (Misc)
  • .Family_物联网
  • .NET Micro Framework初体验(二)
  • .NET Reactor简单使用教程
  • .NET Remoting Basic(10)-创建不同宿主的客户端与服务器端
  • @Autowired注解的实现原理