Wpf 当IsPressed为true时,为什么按钮背景默认为灰色

Wpf 当IsPressed为true时,为什么按钮背景默认为灰色,wpf,xaml,triggers,click,Wpf,Xaml,Triggers,Click,我有一个简单的问题。使用iPressed触发器,我希望能够将按钮的背景色设置为默认灰色以外的颜色。以下是按钮未按下时的外观 下面是单击它时的外观 这是按钮的触发器。我知道触发器是正确触发的,因为当它被点击时,按钮边缘的发光效果。我也知道画笔是正确的,因为我试着把它作为背景画笔,看看它是什么样子 <Style.Triggers> <Trigger Property="IsMouseOver" Value="True&quo

我有一个简单的问题。使用iPressed触发器,我希望能够将按钮的背景色设置为默认灰色以外的颜色。以下是按钮未按下时的外观

下面是单击它时的外观

这是按钮的触发器。我知道触发器是正确触发的,因为当它被点击时,按钮边缘的发光效果。我也知道画笔是正确的,因为我试着把它作为背景画笔,看看它是什么样子

    <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提取不同控件的样式和控件模板。