【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>
以上重新修改后就能够达到我所需要的要求:
点击按钮任何一个区域 ,就能够出发按钮的事件
从这次的例子可以知道,自己还是有许多东西需要学习和总结的。
加油!
干杯!*~( ̄▽ ̄)~[] []~( ̄▽ ̄)~*
作者:ganbei
出处:https://www.cnblogs.com/ganbei/p/14215483.html
版权:本作品采用「署名-非商业性使用-相同方式共享 4.0 国际」许可协议进行许可。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!