WPF 触发器,点击改变按钮颜色问题

D_lady 2018-04-28 10:08:46
大家好,我做了一个按钮然后想点击改变按钮背景色,一直都没实现,目前实现的是按钮获取焦点后背景色改变,但是按钮一旦失去焦点,背景色又还原了,焦点不可能一直在这几个按钮上,所以这种方式不行,我想要的效果是点击按钮改变背景色,然后点另外一个按钮,按钮背景色改变,原来的按钮背景色还原,请问用触发器怎么实现?
<ControlTemplate TargetType="{x:Type Button}">
<Grid>
<!--设置一般情况下按钮的形态-->
<Border x:Name="background" Height="{TemplateBinding Height}" Width="{TemplateBinding Width}"
Background="{x:Null}"
BorderBrush="{x:Null}">
</Border>
<Grid>
<ContentPresenter HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}" Margin="{TemplateBinding Padding}" RecognizesAccessKey="True" SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}" VerticalAlignment="{TemplateBinding VerticalContentAlignment}"/>
</Grid>
</Grid>
<ControlTemplate.Triggers>
<!--当鼠标悬停在按钮上方时,按钮形态设置-->
<Trigger Property="IsMouseOver" Value="true">
<Setter Property="Control.FontWeight" Value="Bold"/>
<Setter Property="Foreground" Value="Black"/>
</Trigger>
<!--当鼠标按下时,按钮形态设置-->
<!--<Trigger Property="IsPressed" Value="true">
<Setter Property="Background" TargetName="background" Value="#FFEBF5F7"/>
<Setter Property="IsEnabled" TargetName="background" Value="False"/>
<Setter Property="Foreground" Value="Black"/>
</Trigger>-->
<!--取到焦点时-->
<Trigger Property="IsFocused" Value="true">
<Setter Property="Background" TargetName="background" Value="#FFEBF5F7"/>
<Setter Property="Foreground" Value="Black"/>
</Trigger>
<!--当按钮不可用时,按钮形态设置-->
<Trigger Property="IsEnabled" Value="false">
<Setter Property="Foreground" Value="Gray"/>
</Trigger>
</ControlTemplate.Triggers>
</ControlTemplate>

...全文
3928 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
god_00544 2018-06-04
  • 打赏
  • 举报
回复
我做按钮效果一般都是新建模板,然后里面添加border或者stackpanel之类的当背景,再用故事版触发,有可能性能上差一点。
liuys00 2018-05-09
  • 打赏
  • 举报
回复
一组 RadioButton是标准做法; 还有另一个不太好的办法:把你btn的背景色绑定到tag或者uid属性上,或者绑到model里的某个属性,再写个转换器; 代码逻辑中修改属性值,背景色就自动变了
yulongguiziyao 2018-05-09
  • 打赏
  • 举报
回复 1
这个应该使用一组单选框(RadioButton),不应该使用Button
  • 打赏
  • 举报
回复
想要的效果是点击按钮改变背景色,然后点另外一个按钮,按钮背景色改变,原来的按钮背景色还原 -》不用普通Button按钮,换成RadioButton,并设置共同的GroupName属性,在属性触发器中设置IsChecked属性的Setter,具体用法网上查查即可。
D_lady 2018-04-28
  • 打赏
  • 举报
回复
引用 1 楼 wangyue4 的回复:
<Trigger Property="IsPressed" Value="True"> <Setter Property="Background" Value="blue"></Setter> </Trigger> 这样就可以改变背景色啊
只是鼠标点下去的时候改变背景色了,松开鼠标又变回来。是我哪里设置不对吗
大黄鸭在发光 2018-04-28
  • 打赏
  • 举报
回复 1
<Trigger Property="IsPressed" Value="True"> <Setter Property="Background" Value="blue"></Setter> </Trigger> 这样就可以改变背景色啊

8,757

社区成员

发帖
与我相关
我的任务
社区描述
WPF/Silverlight相关讨论
社区管理员
  • WPF/Silverlight社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧