2012-04-11 11 views
0

現在、Windows Phone(7.5)アプリケーションを使用していて、ページの1つに要素のリストにバインドされたListBoxが含まれています。動的にバインドされたリスト内の個々の要素のテキストの色を変更する

<ListBox x:Name="MyListBox" 
    ItemsSource="{Binding Path=Listing}" 
    ItemTemplate="{StaticResource MyItemTemplate}" /> 

するDataTemplateには、次の場所を「名前」と「説明」クラスのプロパティである「エンティティ」のようになります。

<DataTemplate x:Key="WordTemplate"> 
    <ListBoxItem Tap="WordTapped">        
     <StackPanel Orientation="Vertical"> 
      <TextBlock Width="Auto" 
        Text="{Binding Name}" 
        FontSize="{StaticResource PhoneFontSizeLarge}" 
        VerticalAlignment="Top" 
        TextWrapping="Wrap" 
        Margin="12, 0, 12, 0" /> 
      <TextBlock Width="Auto" 
        Text="{Binding Description}" 
        Style="{StaticResource PhoneTextSmallStyle}" 
        VerticalAlignment="Top" 
        TextWrapping="Wrap"           
        Margin="12, 0, 12, 12" />    
     </StackPanel> 
    </ListBoxItem> 
</DataTemplate> 

はそれが可能です - 名/説明の実際の値に応じて、 - 各TextBlockのフォント色を変更するには?あなたの名前/説明タグに基づいて生成されたブラシをだあなたのクラスのプロパティを作成し、テキストブロックのForegroundプロパティにバインドする場合は、場合

答えて

2

はい、ブラシに自分の名前と説明を変換ValueConverterを使用します。

<phone:PhoneApplicationPage.Resources> 
     <Converters:TextToBrushConverter x:Key="yourConverter"/> 
    </phone:PhoneApplicationPage.Resources> 

    ... 
    <TextBlock Width="Auto" 
      Text="{Binding Name}" 
      ... 
      Foreground={Binding Name, Converter={StaticResource yourConverter}} /> 

コンバータを:

public class TextToBrushConverter : IValueConverter 
{ 
    public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) 
    { 
     if ((string)value == "XXX") 
     { 
      return new SolidColorBrush(Colors.Red); 
     } 

     return new SolidColorBrush(Colors.Green); 
    } 

    public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) 
    { 
     throw new NotImplementedException(); 
    } 
} 
+0

期待どおりに動作します。ありがとうございました。 – UnclePaul

+0

これを聞いてうれしい、あなたは大歓迎です:) – thumbmunkeys

0

、それは、...

を仕事やすべきですEntityクラスにプロパティを追加しないようにするには、ValueConverter(http://msdn.microsoft.com/en-us/library/system.windows.data.ivalueconverter.aspx)を使用して、私はあなたがそれを行ういくつかのコードが必要かどうかを知っています。

0

はい、あなたがあなた自身のバインディングコンバーターを作成して、結合で使用することができますフォアグラウンドへ

関連する問題