【问题标题】:Changing the text color of individual elements in a dynamically bound list更改动态绑定列表中单个元素的文本颜色
【发布时间】:2012-04-11 21:05:26
【问题描述】:

目前正在开发一个小型 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 的字体颜色?

【问题讨论】:

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


    【解决方案1】:

    是的,使用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();
        }
    }
    

    【讨论】:

    • 按预期工作。谢谢。
    【解决方案2】:

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

    或者,如果您想稍微精明一点,而不是向您的实体类添加属性,您可以使用 ValueConverter (http://msdn.microsoft.com/en-us/library/system.windows.data .ivalueconverter.aspx),如果你想要一些代码来完成它,请告诉我。

    【讨论】:

      【解决方案3】:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-03-04
        • 1970-01-01
        • 2021-12-22
        • 2019-06-29
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多