WPF Style.Trigger鼠标悬停时无法修改Button控件背景色问题
问题根因
你自定义的控件模板内部没有关联按钮本身的Background属性,触发器虽然成功修改了Button的背景属性值,但没有任何可视化元素应用这个属性值,所以看不到悬停变色效果。
修复方案
修改你的资源字典代码如下:
<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"> <Style TargetType="{x:Type Button}" x:Key="TitleBarButtonTheme"> <Style.Setters> <!-- 新增默认背景设置,可根据需求调整默认颜色 --> <Setter Property="Background" Value="Transparent"/> <Setter Property="Template"> <Setter.Value> <ControlTemplate TargetType="Button"> <!-- 给Grid绑定模板父级的Background属性,让背景修改生效 --> <Grid VerticalAlignment="Stretch " HorizontalAlignment="Stretch" Background="{TemplateBinding Background}" > <TextBlock Text="{TemplateBinding Property=Content}" VerticalAlignment="Center" HorizontalAlignment="Center" Foreground="#adadad" Width="{TemplateBinding Property=Width}" Height="{TemplateBinding Property=Height}"/> </Grid> </ControlTemplate> </Setter.Value> </Setter> </Style.Setters> <Style.Triggers> <Trigger Property="IsMouseOver" Value="True"> <Setter Property="Background" Value="Red"/> </Trigger> </Style.Triggers> </Style> </ResourceDictionary>
核心修改点
- 给模板内的Grid添加
Background="{TemplateBinding Background}",让模板根元素响应按钮的背景属性变化 - 新增默认Background属性的Setter,避免默认无背景值导致的显示异常
视图代码不需要做任何修改,直接运行即可看到悬停变红的效果。
内容的提问来源于stack exchange,提问作者Ogie
相关产品推荐
相关产品推荐

