2011-02-25 27 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