2017-03-16 118 views
1

即時通訊正在努力研究如何檢查一個字符串是否包含某些字符/字,並使數據觸發器基於此而關閉。Datatrigger如果字符串包含某些字符

在我的示例中,我希望數據觸發器在數值中有顏色時熄滅,之後出現什麼並不重要。如果是紅蘋果,紅色的小轎車,RED小球說,第一個觸發器,當值包含「紅色」扳機應熄滅不管等

<DataTrigger Binding="{Binding Name}" Value="RED Apple" > 
<Setter Property="Foreground" Value="Red" /> 
</DataTrigger> 

<DataTrigger Binding="{Binding Name}" Value="YELLOW Lemon" > 
<Setter Property="Foreground" Value="Yellow" /> 
</DataTrigger> 

<DataTrigger Binding="{Binding Name}" Value="GREEN Pear" > 
<Setter Property="Foreground" Value="Green" /> 
</DataTrigger> 

我怎樣才能做到這一點

+1

的可能的複製[WPF:我如何設置由TextBlock的文本價值TextBlock的前景財產(http://stackoverflow.com/questions/4099837/wpf-how-do-i-set -text-block-text-value) – ASh

+0

聽起來像是ValueConverter或虛擬機(如果使用MVVM)的作業。好處是你可以單元測試它。 – KornMuffin

+0

您無法在純XAML中實現這種邏輯,因爲XAML是沒有定義「Contains」方法或「LIKE」運算符的*標記*語言。 – mm8

回答

3

創建一個轉換器

public class ColorConverter : IValueConverter { 
    object Convert(object value, Type targetType, object parameter, CultureInfo culture) { 
     return ((string)value.Contains("Color"); 
    } 

    object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture) { 
     throw new NotImplementedException(); 
    } 
} 

然後使用下面的XAML。

<Window.Resources> 
    <myNamespace:ColorConverter x:Key="ColorConverter" Color="red" /> 
</Window.Resources> 

<DataTemplate.Triggers> 
    <DataTrigger Binding="{Binding Path=Color, 
            Converter={StaticResource ColorConverter}}"> 
     <DataTrigger.Value>true</DataTrigger.Value> 
     <Setter TargetName="Color" Property="Foreground" Value="Red"/> 
    </DataTrigger> 
</DataTemplate.Triggers> 
相關問題