<Window.Resources>
        <Style TargetType="Button">
            <Style.Triggers>
                <Trigger Property="IsPressed" Value="true">
                    <Setter Property = "Foreground" Value="Red"/> 
                    <Setter Property="Background" Value="Yellow" />
                </Trigger>
            </Style.Triggers>
        </Style>
    </Window.Resources>
    <Grid Height="100" Name="grid1" Width="200">
        <Button Content="Button" Height="23" HorizontalAlignment="Left" Margin="43,32,0,0" Name="button1" VerticalAlignment="Top" Width="75" />
    </Grid>
当单击按钮的时候,为什么只有前景色变成了红色,而背景色却没有变成黄色?

解决方案 »

  1.   

    BUTTON里面的内部不会因为Background而改变
    你只有通过改变Template才可以
      

  2.   

    你说的啥,我不太懂。单击按钮,Background应该变成Yellow的啊
      

  3.   

    正如你所想的,你所看到的,像其他控件,比如说Border, StackPanel都可以直接设置其背景的。到了Button这里就不可以了。首先这个Background属性是从Control继承过来的,所以你会看到Border, Button都有这个属性。但是,由于Button是一个历史很悠久的控件,也是操作系统中最常见的控件。所以为了保持兼容性,及与操作系统保持一致性。WPF 在提供这个控件的时候就已经提供了一个Button默认的模板,这个模板并没有充分利用Background这个属性,即默认模板没有与这个属性绑定(template binding),而是设置成了与操作系统保持一致性的几种固定表现(mouseover, click等的表现)。所以如果你想利用Button的Background属性,那么你要为Button重新定义模板,在你自己的模板中绑定Background属性,如下面的一个例子:<Button.Template>
                    <ControlTemplate TargetType="{x:Type Button}">
                        <Border Background="{TemplateBinding Background}">
                            <ContentPresenter/>
                        </Border>
                    </ControlTemplate>以上是我的理解,欢迎大家讨论指正。
      

  4.   


    我假设楼主对WPF有一定的了解,如ControlTemplate, DataBinding等。如果不是很清楚的话,要先了解这方面知识的。
      

  5.   

    按钮只有在“抬起”时才使用Background属性,按下的时候不使用它。http://msdn.microsoft.com/en-us/library/ms753328(v=vs.85).aspx如果只是修改背景色,而不是重新设置Style,那么你应该看看 Microsoft_Windows_Themes:ButtonChrome 是如何定义的,找对应该设置的属性并通过 ContentTemplate 来间接访问它。总之它不是 Background。