2012-04-11 5 views
0

В настоящее время работает над небольшим приложением Windows Phone (7.5), а одна из страниц содержит ListBox, привязанный к списку элементов.Изменение цвета текста отдельных элементов в динамически связанном списке

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

DataTemplate выглядит следующим образом где «Имя» и «Описание» являются свойства класса «Entity»:

<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?

ответ

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

Да, вы можете создать свой собственный Binding конвертер и использовать его в связывании на переднем плане.

Смежные вопросы