2011-02-25 56 views
0

我试图将边框背景颜色更改为红色,如果子textr得到值“0”。我正在尝试使用GreaterThanZero Converter,但它无法执行任何操作。我想知道如果有人可以帮助。如果值大于零,我还需要将texblock前景颜色更改为白色。任何想法都非常感谢。先谢谢你。在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> 

回答

2

你要处理的文本框的文本?尝试绑定到Text -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(); 
    } 
} 
+0

不幸的是,我不能这样做。这种方式指定的“文本”强制转换无效。感谢您尝试帮助。 – vladc77 2011-02-25 21:10:37

+0

@ vladc77:这就是我最后一行的意思。绑定到内容是没用的,因为TextBlock上没有Content-Property。因此没有任何反应但是,如果绑定到文本,则绑定起作用,但由于您的转换器不知道如何将字符串转换为int,所以会引发异常。你必须扩展转换器的字符串值。例如:if(value is string){int intValue = 0; Int32.TryParse((string)value,out intValue); return intValue> 0;} ... – HCL 2011-02-25 21:21:40

+0

我无法访问转换器。它包装在dll中。看起来我需要创建一个新的。我想知道你有没有好的样品。再次感谢你。 – vladc77 2011-02-25 21:33:16