2009-12-16 30 views
1

我希望能夠有一個通用的樣式模板,可以根據布爾切換我的文本框的顏色。但我不想爲每個文本框創建獨特的樣式。我該怎麼做呢?XAML - 通用文本框stylewith觸發器/參數?

我已經在下面放置了一些示例代碼,我可能會期望這起作用。 三個文本框,全部使用不同的綁定,但試圖使用相同的模板來選擇基於bool的紅色或綠色。

感謝

<TextBlock Text="{Binding Text1}" Style={DynamicResource MyTextBoxTemplate} DataContext="{Binding MyBool1}" /> 
<TextBlock Text="{Binding Text2}" Style={DynamicResource MyTextBoxTemplate} DataContext="{Binding MyBool2}" /> 
<TextBlock Text="{Binding Text3}" Style={DynamicResource MyTextBoxTemplate} DataContext="{Binding MyBool3}" /> 

      <Style x:Key="MyTextBoxTemplate" TargetType="TextBlock"> 
       <Style.Triggers> 
        <DataTrigger Value="True" Binding="{Binding ???}"> 
         <Setter Property="Foreground" Value="Green" /> 
        </DataTrigger> 
        <DataTrigger Value="False" Binding="{Binding ???}"> 
         <Setter Property="Foreground" Value="Red" /> 
        </DataTrigger> 
       </Style.Triggers> 
      </Style> 

回答

1

您可以使用文本框

<TextBlock Text="{Binding Text1}" Style={DynamicResource MyTextBoxTemplate} Tag="{Binding MyBool1}" /> 
<TextBlock Text="{Binding Text2}" Style={DynamicResource MyTextBoxTemplate} Tag="{Binding MyBool2}" /> 
<TextBlock Text="{Binding Text3}" Style={DynamicResource MyTextBoxTemplate} Tag="{Binding MyBool3}" /> 

<Style x:Key="MyTextBoxTemplate" TargetType="TextBlock"> 
    <Style.Triggers> 
     <Trigger Property="Tag" Value="True"> 
      <Setter Property="Foreground" Value="Green" /> 
     </Trigger> 
     <Trigger Property="Tag" Value="False"> 
      <Setter Property="Foreground" Value="Red" /> 
     </Trigger> 
    </Style.Triggers> 
</Style> 
+0

太棒了,謝謝! – Chris 2009-12-16 11:16:36

1

Tag屬性還可以使用附加屬性,用於代替標籤