2011-07-14 59 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的樣式。我懷疑這可能是你的問題。