我有:
<TextBlock Text="{Binding OrderType}"/>
OrderType是一个字符串,可能是A,B,C,D。但是我想文本块如果(A或B)则显示YES,如果是(C或D)则显示NO,但是如果A则前景色为绿色,如果是B则为蓝色,如果是C则为黄色,如果是D则为红色。这将是什么最好的办法吗?如果我使用转换器,样式触发器应该绑定什么或者是否有更好的方法,我有点困惑。感谢。
答案 0 :(得分:3)
您应该为此目的使用IValueConverter:
public class OrderTypeToYesNoConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
if(value != null)
{
string val = value.ToString();
if(val == "A" || val == "B")
return "YES";
}
return null;
}
public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
{
throw new NotImplementedException();
}
}
<Window
..
..
xmlns:converters="clr-namespace:NameSpace;assembly=Assembly">
<Window.Resources>
<converters:OrderTypeToYesNoConverter x:Key="OrderTypeToYesNoConverter"/>
</Window.Resources>
<TextBlock Text="{Binding OrderType, Converter="{StaticResource OrderTypeToYesNoConverter}"/>
答案 1 :(得分:1)
你可以仅使用触发器执行此操作,但有一些冗余:
<TextBlock>
<TextBlock.Style>
<Style TargetType="TextBlock">
<Style.Triggers>
<DataTrigger Binding="{Binding OrderType}" Value="A">
<Setter Property="Text" Value="YES" />
<Setter Property="Foreground" Value="Green" />
</DataTrigger>
<DataTrigger Binding="{Binding OrderType}" Value="B">
<Setter Property="Text" Value="YES" />
<Setter Property="Foreground" Value="Blue" />
</DataTrigger>
<DataTrigger Binding="{Binding OrderType}" Value="C">
<Setter Property="Text" Value="NO" />
<Setter Property="Foreground" Value="Yellow" />
</DataTrigger>
<DataTrigger Binding="{Binding OrderType}" Value="D">
<Setter Property="Text" Value="NO" />
<Setter Property="Foreground" Value="Red" />
</DataTrigger>
</Style.Triggers>
</Style>
</TextBlock.Style>
</TextBlock>