2015-06-04 32 views
3

我想設置一個觸發器,所以如果兩個值匹配發生顏色變化,這很容易,當匹配的東西是靜態的,並且可以正確放置到xaml中,而不是當事物被比較的是動態的,比如屬性。無論如何基本上是有觸發器的價值綁定到一個屬性?將觸發值綁定到一個屬性

示例 - 錯誤表示值無法使用綁定。這導致我認爲價值必須是靜態的。

<TextBlock Name="MyTextBlock" Text="{Binding someProp}"> 
    <TextBlock.Resources> 
     <Style TargetType="TextBlock"> 
      <Style.Triggers> 
       <DataTrigger Binding="{Binding ElementName=MyTextBlock, Path=Text}" Value="{Binding someOtherProperty}"> 
        Do some stuff here 
       </DataTrigger> 
      </Style.Triggers> 
     </Style> 
    </TextBlock.Resources> 
</Textblock> 

編輯:更新它到數據觸發器,但問題依然存在。

+0

[對DataTrigger條件的Value屬性使用綁定](http://stackoverflow.com/questions/2240421/using-binding-for-the-value-property-of-datatrigger-condition)或[在DataTrigger條件中使用綁定](http://stackoverflow.com/q/2239839/620360)。 – LPL

回答

3

爲此,你可使用DataTriggers像顯示在下面的例子中(TextBlock名爲txtBlock顏色的變化依賴於值「R」或「N」):

<Style.Triggers> 
    <DataTrigger Binding="{Binding ElementName=txtBlock,Path=Text}" Value="R"> 
      <Setter Property="Background" Value="#f9f9f9" /> 
      <Setter Property="Foreground" Value="Red" /> 
    </DataTrigger> 
    <DataTrigger Binding="{Binding ElementName=txtBlock,Path=Text}" Value="N"> 
     <Setter Property="Background" Value="Yellow" /> 
     <Setter Property="Foreground" Value="Black" /> 
    </DataTrigger> 
</Style.Triggers> 

解決方案適用於任何有限的數據集在條件下使用。對於更復雜的情況(例如條件塊中使用的變量等),可以在代碼隱藏中實現值轉換器和綁定,如示例中所示:Binding in WPF DataTrigger value。此外,您可能會考慮MultiDataTriggerDataTriggerMultiBinding(re:MultiDataTrigger vs DataTrigger with multibinding)。

希望這可能有所幫助。

+0

這將比較txtBlock.Text與值,我的問題是值不是靜態的。我 –

+0

我已經擴展了答案(我猜,'靜態'你的意思是一個常量,所以你的問題是關於在數據觸發器中使用變量)。最好的問候, –

+1

與多重綁定的數據觸發器是我正在尋找。謝謝。 –