在Textblock值上更改边框背景颜色?

时间:2011-02-25 20:43:06

标签: wpf wpf-controls binding

如果子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>

1 个答案:

答案 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();
    }
}