WPF,这个触发器为何没有执行
WPF,这个触发器为什么没有执行Window.ResourcesStyle TargetTypeButtonStyle.TriggersTrigger P
WPF,这个触发器为什么没有执行
<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>
当单击按钮的时候,为什么只有前景色变成了红色,而背景色却没有变成黄色?
[解决办法]BUTTON里面的内部不会因为Background而改变
你只有通过改变Template才可以
[解决办法]正如你所想的,你所看到的,像其他控件,比如说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>
以上是我的理解,欢迎大家讨论指正。
[解决办法]我假设楼主对WPF有一定的了解,如ControlTemplate, DataBinding等。如果不是很清楚的话,要先了解这方面知识的。
[解决办法]按钮只有在“抬起”时才使用Background属性,按下的时候不使用它。
http://msdn.microsoft.com/en-us/library/ms753328(v=vs.85).aspx
如果只是修改背景色,而不是重新设置Style,那么你应该看看 Microsoft_Windows_Themes:ButtonChrome 是如何定义的,找对应该设置的属性并通过 ContentTemplate 来间接访问它。总之它不是 Background。
[解决办法]上面的链接