更改动态绑定列表中各个元素的文本颜色

时间:2012-04-11 21:05:26

标签: wpf windows-phone-7 data-binding

目前正在开发一个小型Windows Phone(7.5)应用程序,其中一个页面包含一个绑定到元素列表的ListBox。

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

DataTemplate如下所示,其中“Name”和“Description”是“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的字体颜色?

3 个答案:

答案 0 :(得分: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();
    }
}

答案 1 :(得分:0)

如果您在类中创建了一个属性,该属性是基于您的Name / Description标签生成的Brush,并将其绑定到文本块的Foreground属性,那么它应该有用......

或者,如果你想要稍微更加精确,而不是为你的Entity类添加属性,你可以使用ValueConverter(http://msdn.microsoft.com/en-us/library/system.windows.data .ivalueconverter.aspx),如果你想要一些代码,请告诉我。

答案 2 :(得分:0)

是的,您可以创建自己的Binding Converter并将其用于绑定到Foreground。