我想使用样式(在WPF中)更改文本框的背景。但是文本框已经基于样式。所以当我给出背景时它设置它不会覆盖原始样式。下面是代码我是努力工作:
<TextBox text="value">
<TextBox.Style>
<Style TargetType="{x:Type TextBox}" BasedOn="{StaticResource {x:Type TextBox}}">
<Style.Triggers>
<MultiDataTrigger>
<MultiDataTrigger.Conditions>
<Condition Binding="{Binding Path=path}" Value="False"/>
</MultiDataTrigger.Conditions>
<MultiDataTrigger.Setters>
<Setter Property="ForeGround" Value="Red"/>
<Setter Property="Background" Value="LightGray"/>
</MultiDataTrigger.Setters>
</MultiDataTrigger>
</Style.Trigger>
</Style>
代码将前景变为红色,但文本框的背景中没有chnage。
如何覆盖backgorund颜色。我需要在WPF中执行此操作。
答案 0 :(得分:3)
这绝对不是您正在使用的代码,没有ForeGround
属性,理论上(除了错误)这将起作用,如果触发器被触发,背景会改变。
另一个有效的简单例子:
<CheckBox Name="cb" Content="Red BG"/>
<TextBox>
<TextBox.Style>
<Style TargetType="{x:Type TextBox}" BasedOn="{StaticResource {x:Type TextBox}}">
<Style.Triggers>
<DataTrigger Binding="{Binding IsChecked, ElementName=cb}" Value="True">
<Setter Property="Background" Value="Red"/>
</DataTrigger>
</Style.Triggers>
</Style>
</TextBox.Style>
</TextBox>
然而,以下不工作:
<CheckBox Name="cb" Content="Red BG"/>
<TextBox Background="Green">
<TextBox.Style>
<Style TargetType="{x:Type TextBox}" BasedOn="{StaticResource {x:Type TextBox}}">
<Style.Triggers>
<DataTrigger Binding="{Binding IsChecked, ElementName=cb}" Value="True">
<Setter Property="Background" Value="Red"/>
</DataTrigger>
</Style.Triggers>
</Style>
</TextBox.Style>
</TextBox>
请注意,背景在声明中首先设置为绿色,此直接值将覆盖由dependency property value precedence引起的样式,如果要设置初始值,则需要在样式的setter中完成(在任何触发器之外)。我怀疑这可能是你的问题。
答案 1 :(得分:0)
将setter语句放在样式语句
之后<Setter Property="Background" Value="red"/>
像..
<Style TargetType="{x:Type TextBox}" BasedOn="{StaticResource {x:Type TextBox}}">
<Setter Property="Background" Value="red"/>
<Style.Triggers>.........