2011-07-14 34 views
0

我想要使用样式(在WPF中)更改文本框的背景。但是文本框已经基于样式。因此,当我给它背景时,它不会覆盖原始样式。下面是我努力工作的代码:重写文本框的背景颜色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> 

的代码chnaging前台红色但是在文本框的背景没有chnage。

我如何重写backgorund颜色。我需要在WPF中执行此操作。

+0

此代码不会将前景更改为红色。 – stukselbax

+0

“'ForeGround'”区分大小写,并且拼写错误,所以我怀疑这会将前景设置为红色,如同书面。既然如此,要么你没有准确地复制你的代码(在这种情况下很难诊断问题),或者你错了代码的行为。这是什么? –

回答

0

只是把二传手声明的样式声明

<Setter Property="Background" Value="red"/> 

等之后..

<Style TargetType="{x:Type TextBox}" BasedOn="{StaticResource {x:Type TextBox}}"> 
    <Setter Property="Background" Value="red"/> 
<Style.Triggers>......... 
+1

我也试过这个,但它不工作。我可以设置任何其他的财产,如forground,bodor等,但不是背景颜色。它似乎我们不能直接覆盖原始风格的背景 – avi

+0

我现在尝试它,它的作品。没有任何'Style.Triggers'。只是'Setter's – stukselbax

+0

@avi或许TextBox是只读的。在这种情况下,不可能像这样设置背景。 –

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> 

注意,背景设置为绿色先在声明中,这直接价值会如果要设置初始值,则需要在样式中(在任何触发器之外)在setter中完成,否则覆盖dependency property value precedence的样式。我怀疑这可能是你的问题。