最近工作需要,需要重绘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修改样式模板后作用区域的变化的更多相关文章

  1. wpf slider进度条的样式模板,带有进度颜色显示

    效果图: 仅仅需在前台加上这段代码就可以: <UserControl.Resources> <!--笔刷--> <LinearGradientBrush x:Key=&q ...

  2. arcgis server10.7修改打印模板后前台调用不生效

    在10.5.1及之前的版本中,如果更改打印地图模板,如字体设置,那么直接修改[ArcGIS for Server 安装目录]/Templates/ExportWebMapTemplates下的mxd的 ...

  3. WPF自定义控件(二)の重写原生控件样式模板

    话外篇: 要写一个圆形控件,用Clip,重写模板,去除样式引用圆形图片可以有这三种方式. 开发过程中,我们有时候用WPF原生的控件就能实现自己的需求,但是样式.风格并不能满足我们的需求,那么我们该怎么 ...

  4. 【WPF】MVVM动态修改Bingding的另一种思路——用Style样式

    问题场景: 界面上有个ListBox控件,它的内容Item绑定了一个列表,即 ItemsSource =”{Binding StudentList}”.这个StudentList列表在该界面View对 ...

  5. dede修改templets模板文件夹后,出现“无法在这个位置找到: ”错误的解决办法

    修改templets模板文件夹的方法: 首先找到系统配置文件common.inc.php,此文件存放在Include目录下,打开common.inc.php来修改默认模板目录templets, 查找: ...

  6. WPF XAML 资源样式模板属性存放位置

    WPF的XAML 资源申明 类似HTML. 整体来说分3种1.行类资源样式属性 1.1 行内属性 <Button Content="按钮" Foreground=" ...

  7. vue加scoped后无法修改样式(无法修改element UI 样式)

    有的时候element提供的默认的样式不能满足项目的需要,就需要我们队标签的样式进行修改,但是发现修改的样式不起作用 第一种方法 原因:scoped 解决方法:去掉scoped 注意:此时该样式会污染 ...

  8. [zz] 基于国家标准的 EndNote 输出样式模板

    基于国家标准的 EndNote 输出样式模板 https://cnzhx.net/blog/endnote-output-style-cnzhx/ 发表于 2013-05-26 作者 Haoxian ...

  9. [转]基于国家标准的 EndNote 输出样式模板 ----直接用endnote导入到word,不用自己一个个改参考文献了

    EndNote 相当于一个数据库,将添加/导入的文献存档.需要引用文献的时候就从中选择一个插入到文档中,EndNote 会自动给你编号.在文档末尾建立相应的参考文献列表.但是各种杂志.单位要求的文献著 ...

随机推荐

  1. C#(一)基础篇—类型与变量

    于今日起学习巩固C#基础 2020-12-01 本随笔用于个人回忆理解,记录当天学习过程,内容多从书中整理与自我学习了解,如有问题麻烦指正 以后有时间会单独分版块叙述 不管什么语言,都从一个Hello ...

  2. JZOJ2020年9月12日提高B组反思

    CSP第1轮倒计时:29天 JZOJ2020年9月12日提高B组反思 T1 放在T1却是最难的一题 明显需要高精度 但是我小学奥数没学好,不知道怎么把正有理数转化成分数 T2 明显的DP 可惜的是我文 ...

  3. 数据库原理-事务隔离与多版本并发控制(MVCC)

    刚来美团实习,正好是星期天,不得不说,其内部的资料很丰富,看了部分文档后,对数据库事务这块更理解了.数据库事务的ACID,大家都知道,为了维护这些性质,主要是隔离性和一致性,一般使用加锁这种方式.同时 ...

  4. MoviePy v2.0.0.dev1尚不成熟,不建议大家使用

    ☞ ░ 前往老猿Python博文目录 ░ 在<重要消息:MoviePy v2.0.0.dev1预发布版本已经可以下载安装使用>之后老猿就安装了MoviePy v2.0.0.dev1这个版本 ...

  5. 第15.28节 PyQt(Python+Qt)入门学习:Model/View架构中的便利类QTableWidget详解

    老猿Python博文目录 专栏:使用PyQt开发图形界面Python应用 老猿Python博客地址 一.引言 表格部件为应用程序提供标准的表格显示工具,在表格内可以管理基于行和列的数据项,表格中的最大 ...

  6. 第14章 web前端开发小白学爬虫结束语

    老猿学爬虫应该是2019年7月初开始的,到现在2个多月了,有段时间了,这部分一直是老猿期待能给大家带来收获的,因为老猿爬虫实战应用的场景与网上老猿已知的场景基本都不一样,是从复用网站登录会话信息来开发 ...

  7. Leetcode学习笔记(6)

    题目1 ID112 给定一个二叉树和一个目标和,判断该树中是否存在根节点到叶子节点的路径,这条路径上所有节点值相加等于目标和. 说明: 叶子节点是指没有子节点的节点. 示例: 给定如下二叉树,以及目标 ...

  8. python基本案例实现

    案例一:test.txt文件中与输入的用户进行认证,超过3次用户被锁定,且把用户加入锁定的lock.txt文件中. # 需求点: # 1.输入用户名.密码 # 2.认证成功后显示欢迎信息 # 3.输错 ...

  9. javascript (JS组成、书写位置、基本概念、作用域、内存问题、变量)

    1 JavaScript的组成和书写位置 Javascript:运行在客户端(浏览器)的脚本语言,JavaScript的解释器被称为JavaScript引擎,为浏览器的一部分,与java没有直接的关系 ...

  10. 性能测试基础——(MEN)

    关于内存在一块其实我并不是很想拿出来说,一般情况下内存这一块都是可优化的,可以通过硬件资源或者调整一些系统或者应用系统的参数配置来进行优化. 很多同僚问到了"内存泄漏"和" ...