我有一个简单的问题。使用IsPressed触发器我希望能够将按钮的背景颜色设置为默认灰色以外的颜色。这是按钮未按下时的样子
这就是点击它时的样子
这是按钮的触发器。我知道触发器正在正确触发,因为单击按钮边缘时会产生发光效果。我也知道画笔是正确的,因为我尝试了它作为背景画笔,看看它是什么样的。
<Style.Triggers>
<Trigger Property="IsMouseOver" Value="True">
<Setter Property="Background" Value="{DynamicResource ButtonHoverBrush}"/>
<Setter Property="BitmapEffect" Value="{DynamicResource ButtonHoverGlow}"/>
</Trigger>
<!-- This is the trigger which is working but the background color wont change -->
<Trigger Property="IsPressed" Value="True">
<Setter Property="BitmapEffect" Value="{DynamicResource ButtonHoverGlow}"/>
<Setter Property="Background" Value="{DynamicResource ButtonPressedBrush}" />
</Trigger>
</Style.Triggers>
正如您所看到的,这是整个样式,它是一种适用于整个应用程序中所有按钮的默认样式。
<Style TargetType="Button">
<Setter Property="Background" Value="{DynamicResource ButtonBrush}" />
<Setter Property="Foreground" Value="Black" />
<Style.Triggers>
<Trigger Property="IsMouseOver" Value="True">
<Setter Property="Background" Value="{DynamicResource ButtonHoverBrush}"/>
<Setter Property="BitmapEffect" Value="{DynamicResource ButtonHoverGlow}"/>
</Trigger>
<Trigger Property="IsPressed" Value="True">
<Setter Property="BitmapEffect" Value="{DynamicResource ButtonHoverGlow}"/>
<Setter Property="Background" Value="{DynamicResource ButtonPressedBrush}" />
</Trigger>
</Style.Triggers>
</Style>
这是最终解决方案(感谢所有帮助过的人)
为通用按钮创建控件模板并执行一些数据绑定:
<ControlTemplate TargetType ="Button" x:Key="ButtonControlTemplate">
<Border Background="{TemplateBinding Background}"
BorderThickness="{TemplateBinding BorderThickness}"
BorderBrush="{TemplateBinding BorderBrush}"
CornerRadius="3">
<Grid>
<ContentPresenter ContentSource="{TemplateBinding Content}"
ContentTemplate="{TemplateBinding ContentTemplate}"
VerticalAlignment="{TemplateBinding VerticalContentAlignment}"
HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}"/>
</Grid>
</Border>
</ControlTemplate>
将控制模板添加到样式:
<Style TargetType="Button">
<Setter Property="Background" Value="{DynamicResource ButtonBrush}" />
<Setter Property="Foreground" Value="Black" />
<Setter Property="Template" Value="{DynamicResource ButtonControlTemplate}" />
<Setter Property="BorderThickness" Value="1" />
<Style.Triggers>
<Trigger Property="IsMouseOver" Value="True">
<Setter Property="Background" Value="{DynamicResource ButtonHoverBrush}"/>
<Setter Property="BitmapEffect" Value="{DynamicResource ButtonHoverGlow}"/>
</Trigger>
<Trigger Property="IsPressed" Value="True">
<Setter Property="BitmapEffect" Value="{DynamicResource ButtonHoverGlow}"/>
<Setter Property="Background" Value="{DynamicResource ButtonPressedBrush}" />
</Trigger>
</Style.Triggers>
</Style>
注意:BorderThickness默认为1,否则它不会显示
答案 0 :(得分:1)
问题在于windows xp主题luna的默认控件模板。如果您将显示属性中的主题更改为经典,则您的样式将起作用。
应该可以覆盖wpf中的系统颜色,但我无法用该解决方案解决您的问题,可能是颜色被冻结,因此无法更改或用于创建主题特定外观的类,ButtonChrome,已经坏了。
我认为您最好的选择是为按钮制作自己的控件模板。