Wpf 当IsPressed为true时,为什么按钮背景默认为灰色
我有一个简单的问题。使用iPressed触发器,我希望能够将按钮的背景色设置为默认灰色以外的颜色。以下是按钮未按下时的外观Wpf 当IsPressed为true时,为什么按钮背景默认为灰色,wpf,xaml,triggers,click,Wpf,Xaml,Triggers,Click,我有一个简单的问题。使用iPressed触发器,我希望能够将按钮的背景色设置为默认灰色以外的颜色。以下是按钮未按下时的外观 下面是单击它时的外观 这是按钮的触发器。我知道触发器是正确触发的,因为当它被点击时,按钮边缘的发光效果。我也知道画笔是正确的,因为我试着把它作为背景画笔,看看它是什么样子 <Style.Triggers> <Trigger Property="IsMouseOver" Value="True&quo
下面是单击它时的外观
这是按钮的触发器。我知道触发器是正确触发的,因为当它被点击时,按钮边缘的发光效果。我也知道画笔是正确的,因为我试着把它作为背景画笔,看看它是什么样子
<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,因为否则它不会显示问题在于windows xp主题luna的默认控件模板。如果将“显示属性”中的主题更改为“经典”,则您的样式将正常工作 应该可以覆盖wpf中的系统颜色,但我无法用该解决方案解决您的问题,可能颜色已冻结,因此无法更改,或者用于创建特定主题外观的类ButtonChrome已损坏
我认为最好的办法是为按钮制作自己的控件模板。问题在于windows xp theme luna的默认控件模板。如果将“显示属性”中的主题更改为“经典”,则您的样式将正常工作 应该可以覆盖wpf中的系统颜色,但我无法用该解决方案解决您的问题,可能颜色已冻结,因此无法更改,或者用于创建特定主题外观的类ButtonChrome已损坏
我认为最好的办法是为按钮制作自己的控件模板。您可以共享模板XAML吗?它不是模板的一部分,而是样式的一部分。我已经添加了完整的样式供您查看atI认为Kishore意味着Brushesah kk的实现细节,我可以添加它们,但正如我所说,它们都在工作。我将它们作为按钮的标准背景属性进行了测试,以确保它们都显示出来。添加的解决方案(感谢Oggy)您可以共享模板XAML吗?它不是模板的一部分,而是样式的一部分。我已经添加了完整的样式供您查看atI认为Kishore意味着Brushesah kk的实现细节,我可以添加它们,但正如我所说,它们都在工作。我将它们作为按钮的标准背景属性进行了测试,以确保它们都显示出来。添加的解决方案(感谢Oggy)我将试一试,我不愿意为按钮制作一个controltemplate,因为这种样式在我所有的按钮中都是通用的。我会去的,伙计!它工作得很好。我控制模板按钮,现在我的背景改变点击如果你害怕应用自己的模板,害怕丢失任何必要的部分。然后尝试使用Microsoft Expression Blend提取不同控件的样式和控件模板。我会尝试一下,我不愿意为按钮制作控件模板,因为这种样式在我所有的按钮中都是通用的。我会去的,伙计!它工作得很好。我控制模板按钮,现在我的背景改变点击如果你害怕应用自己的模板,害怕丢失任何必要的部分。然后尝试使用Microsoft Expression Blend提取不同控件的样式和控件模板。