【WPF】 问题总结-RaidButton修改样式模板后作用区域的变化
最近工作需要,需要重绘RaidButton控件,具体想要达成的的效果是这样的:

当点击按钮任意一个地方的时候,按钮的背景改变。
于是我是这样对控件模板进行修改的:
<Style x:Key="raidstyle" TargetType="RadioButton">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="RadioButton">
<Grid>
<Border x:Name="bord1"
Width="320"
Height="138"
BorderBrush="#6B778D"
BorderThickness="1"
CornerRadius="8" />
<Border x:Name="bord"
<Grid>
<StackPanel Margin="0,33,0,0">
<Grid
Margin="0,-10,0,10"
HorizontalAlignment="Center"
VerticalAlignment="Center">
<Ellipse x:Name="ell1"
Width="33"
Height="33"
StrokeThickness="3"
Stroke="White" />
<Ellipse x:Name="ell2"
Width="13"
Height="13"
StrokeThickness="1"
Stroke="#2196F3"
Fill="#2196F3"
Visibility="Collapsed" />
</Grid>
<ContentPresenter
Content="{TemplateBinding Content}"
HorizontalAlignment="{TemplateBinding HorizontalAlignment}"
VerticalAlignment="{TemplateBinding VerticalAlignment}" />
</StackPanel>
</Grid>
</Border>
</Grid> <ControlTemplate.Triggers>
<Trigger Property="IsChecked" Value="True">
<Setter TargetName="bord1" Property="Background" Value="#FF919191" />
<Setter TargetName="bord1" Property="Opacity" Value="0.1" />
<Setter TargetName="ell1" Property="Stroke" Value="#2196F3" />
<Setter TargetName="ell2" Property="Visibility" Value="Visible" />
</Trigger>
</ControlTemplate.Triggers>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
但是这样就出现了问题,实际出来的作用并不是点击按钮任何一个地方就能够改变背景颜色
而是只能点击 字 所在的区域才能够出发这个触发器
于是对其他人进行了请教后,发现
需要将按钮的 “Border” 的“Background” ,"BorderBrush",“BorderThickness”
三个属性绑定到对应的按钮上的模板本身上才可以
于是对代码进行了修改
<Style x:Key="raidstyle" TargetType="RadioButton">
<Setter Property="HorizontalAlignment" Value="Center" />
<Setter Property="VerticalAlignment" Value="Center" />
<Setter Property="Background" Value="Transparent" />
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="RadioButton">
<Grid>
<Border x:Name="bord1"
Width="320"
Height="138"
BorderBrush="#6B778D"
BorderThickness="1"
CornerRadius="8" />
<Border x:Name="bord"
Background="{TemplateBinding Background}"
BorderBrush="{TemplateBinding BorderBrush}"
BorderThickness="{TemplateBinding BorderThickness}"> <Grid>
<StackPanel Margin="0,33,0,0">
<Grid
Margin="0,-10,0,10"
HorizontalAlignment="Center"
VerticalAlignment="Center">
<Ellipse x:Name="ell1"
Width="33"
Height="33"
StrokeThickness="3"
Stroke="White" />
<Ellipse x:Name="ell2"
Width="13"
Height="13"
StrokeThickness="1"
Stroke="#2196F3"
Fill="#2196F3"
Visibility="Collapsed" />
</Grid>
<ContentPresenter
Content="{TemplateBinding Content}"
HorizontalAlignment="{TemplateBinding HorizontalAlignment}"
VerticalAlignment="{TemplateBinding VerticalAlignment}" />
</StackPanel>
</Grid>
</Border>
</Grid> <ControlTemplate.Triggers>
<Trigger Property="IsChecked" Value="True">
<Setter TargetName="bord1" Property="Background" Value="#FF919191" />
<Setter TargetName="bord1" Property="Opacity" Value="0.1" />
<Setter TargetName="ell1" Property="Stroke" Value="#2196F3" />
<Setter TargetName="ell2" Property="Visibility" Value="Visible" />
</Trigger>
</ControlTemplate.Triggers>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
以上重新修改后就能够达到我所需要的要求:
点击按钮任何一个区域 ,就能够出发按钮的事件
从这次的例子可以知道,自己还是有许多东西需要学习和总结的。
加油!
干杯!*~( ̄▽ ̄)~[] []~( ̄▽ ̄)~*
【WPF】 问题总结-RaidButton修改样式模板后作用区域的变化的更多相关文章
- wpf slider进度条的样式模板,带有进度颜色显示
效果图: 仅仅需在前台加上这段代码就可以: <UserControl.Resources> <!--笔刷--> <LinearGradientBrush x:Key=&q ...
- arcgis server10.7修改打印模板后前台调用不生效
在10.5.1及之前的版本中,如果更改打印地图模板,如字体设置,那么直接修改[ArcGIS for Server 安装目录]/Templates/ExportWebMapTemplates下的mxd的 ...
- WPF自定义控件(二)の重写原生控件样式模板
话外篇: 要写一个圆形控件,用Clip,重写模板,去除样式引用圆形图片可以有这三种方式. 开发过程中,我们有时候用WPF原生的控件就能实现自己的需求,但是样式.风格并不能满足我们的需求,那么我们该怎么 ...
- 【WPF】MVVM动态修改Bingding的另一种思路——用Style样式
问题场景: 界面上有个ListBox控件,它的内容Item绑定了一个列表,即 ItemsSource =”{Binding StudentList}”.这个StudentList列表在该界面View对 ...
- dede修改templets模板文件夹后,出现“无法在这个位置找到: ”错误的解决办法
修改templets模板文件夹的方法: 首先找到系统配置文件common.inc.php,此文件存放在Include目录下,打开common.inc.php来修改默认模板目录templets, 查找: ...
- WPF XAML 资源样式模板属性存放位置
WPF的XAML 资源申明 类似HTML. 整体来说分3种1.行类资源样式属性 1.1 行内属性 <Button Content="按钮" Foreground=" ...
- vue加scoped后无法修改样式(无法修改element UI 样式)
有的时候element提供的默认的样式不能满足项目的需要,就需要我们队标签的样式进行修改,但是发现修改的样式不起作用 第一种方法 原因:scoped 解决方法:去掉scoped 注意:此时该样式会污染 ...
- [zz] 基于国家标准的 EndNote 输出样式模板
基于国家标准的 EndNote 输出样式模板 https://cnzhx.net/blog/endnote-output-style-cnzhx/ 发表于 2013-05-26 作者 Haoxian ...
- [转]基于国家标准的 EndNote 输出样式模板 ----直接用endnote导入到word,不用自己一个个改参考文献了
EndNote 相当于一个数据库,将添加/导入的文献存档.需要引用文献的时候就从中选择一个插入到文档中,EndNote 会自动给你编号.在文档末尾建立相应的参考文献列表.但是各种杂志.单位要求的文献著 ...
随机推荐
- Linux|CentOS下配置Maven环境
1.下载maven包 wget http://mirrors.tuna.tsinghua.edu.cn/apache/maven/maven-3/3.3.9/binaries/apache-maven ...
- JMeter 安装 启动(即中文的修改)
一.安装 (1).java 和 apache-jmeter-4.0 2.点击apache-jmeter-4.0进入bin目录,点击jmeter.bat 如果没有安装java就会出现下图 遇到上面是因为 ...
- 第1.2节 Python学习环境的使用
Python的环境安装好以后,可以通过IDLE(Python 3.7 64-bit)进入图形界面使用Python,也可以通过Python 3.7 64-bit进入命令行交互式界面,两者都可以使用,不过 ...
- 第8.9节 Python类中内置的查看直接父类的__bases__属性
终于介绍完了__init__方法和__new__方法,接下来轻松一下,本节介绍类中内置的__bases__属性. 一. 语法释义 Python 为所有类都提供了一个 bases 属性,通过该属性可以查 ...
- 第11.12节 Python元字符“|”支持的正则表达式多选一匹配模式
re模块支持多个正则表达式使用"|"(逻辑或)模式来组合,扫描目标字符串时, '|' 分隔开的正则表达式组合从左到右进行匹配,只要其中一个匹配成功就认为该组合匹配成功,不再进行组合 ...
- RedHat操作指令第2篇
六.RPM包管理命令 主要功能 查询RPM软件.包文件的相关信息 安装.升级.卸载RPM软件包 维护RPM数据库信息 查询RPM软件信息 查询已安装的RPM软件信息 格式:rpm -q[子选项] [软 ...
- LSB隐写加密MISC
没有做过LSB隐写加密的题目,在buuoj上面做到了就记录一下,估计后面很长的时间都会在这个平台上面训练自己的MISC和WEB,是很好的平台,把很多比赛的原题和安恒的周赛的复现了. 题目是MISC里面 ...
- csv 如何将txt文件转换成csv文件
import csvdef convert_txt_to_csv(out_file_path, input_file_path, txt_sep): #定义输出路径,输入文件路径,txt的分隔符 wi ...
- 华大MCU单片机之HC32F003/HC32F005 hc32f005_ddl_Rev1.9.0 Lite精简版库使用心得
之前几个项目开发都是用的华大HC32F003_DDL_Rev1.0.2的库函数,今年刚开始入手华大,刚开始不是很了解这个芯片,看到库能用就上手了.这个版本的库编译效率很低,16K的芯片一下就写爆了.后 ...
- Scrum 冲刺 第二篇
Scrum 冲刺 第二篇 每日会议照片 昨天已完成工作 队员 昨日完成任务 黄梓浩 初步完成app项目架构搭建 黄清山 完成部分个人界面模块数据库的接口 邓富荣 完成部分后台首页模块数据库的接口 钟俊 ...