如果子texblock的值为“0”,我试图将边框背景颜色更改为红色。我正在尝试使用GreaterThanZero Converter,但它没有做任何事情。我想知道是否有人可以提供帮助。如果值大于零,我还需要将texblock前景色更改为白色。任何想法都受到高度赞赏。提前谢谢。
这是我的XAML:
<Grid>
<Border x:Name="TextBoxBorder" BorderThickness="1" Width="30">
<TextBlock x:Name="TotalTileValue" Text="{Binding TotalItemCount}">
<TextBlock.Style>
<Style>
<Style.Triggers>
<DataTrigger Binding="{Binding Content, Converter={x:Static local:GreaterThanZeroConverter.Instance}, RelativeSource={RelativeSource Self}}" Value="True" >
<Setter Property="TextBlock.Foreground" Value="White" />
<Setter TargetName="TextBoxBorder" Property="Background" Value="#FFCC0000" />
</DataTrigger>
</Style.Triggers>
</Style>
</TextBlock.Style>
</TextBlock>
</Border>
答案 0 :(得分:2)
您要处理TextBox的文本吗?尝试绑定到Text
- Property而不是content-Property。
<DataTrigger Binding="{Binding Text, Converter={x:Static local:GreaterThanZeroConverter.Instance}, RelativeSource={RelativeSource Self}}" Value="True" >
然而也许这只是半个故事。这取决于转换器。如果它处理字符串值,它将会执行。
修改强>
根据需要,这里开始介绍如何构建自己的值转换器。请注意,我不知道您的具体要求。我还没有测试过代码。它应该只是您自己的转换器的起点:
public class GreaterThanZeroValueConverter : IValueConverter{
public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) {
if (null == value) {
return false;
}
int intValue = 0;
if (value is string) {
if (!Int32.TryParse((string)value,out intValue)) {
return false;
}
}
if (value is int) {
intValue = (int)value;
} else {
throw new InvalidOperationException("Unsupported Type ["+value.GetType().Name+"]");
}
return intValue > 0;
}
public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) {
throw new NotImplementedException();
}
}