0

目前正在开发一个小型 Windows Phone (7.5) 应用程序,其中一个页面包含一个绑定到元素列表的 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 的字体颜色?

4

3 回答 3

2

是的,使用 aValueConverter将您的名称和描述转换为画笔:

    <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();
    }
}
于 2012-04-11T21:10:21.247 回答
0

如果您在类中创建一个属性,该属性是基于您的名称/描述标签生成的 Brush,并将其绑定到文本块的 Foreground 属性,那应该可以...

或者,如果您想稍微精明一点,而不是向您的 Entity 类添加属性,您可以使用 ValueConverter (http://msdn.microsoft.com/en-us/library/system.windows.data.ivalueconverter。 aspx),让我知道你是否想要一些代码来做到这一点。

于 2012-04-11T21:09:18.617 回答
0

是的,您可以创建自己的绑定转换器并将其用于绑定到前台。

于 2012-04-11T21:11:24.683 回答