动态更改后面代码(WPF)中列表框项的颜色

时间:2014-09-17 13:06:01

标签: c# wpf listbox

我有一个流量申请。灯光状态在列表框中更新。

<ListBox x:Name="lbxCallProgress"  ItemsSource="{Binding Messages,Mode=TwoWay}" Height="373" FontSize="8" ScrollViewer.VerticalScrollBarVisibility="Visible">
        <ListBox.ItemTemplate>
            <DataTemplate>
                <TextBlock Text="{Binding}"/>
            </DataTemplate>
        </ListBox.ItemTemplate>
    </ListBox>

对于消息:

public partial class MainWindow : Window
{
    public ObservableCollection<string> Messages { get; set; }

将邮件更新到列表框。

    void UpdateMessage(string message)
    {
        try
        {
            Dispatcher.BeginInvoke((Action)delegate()
            {
                Dispatcher.BeginInvoke(new Action(() => { this.Messages.Add(message); }));
            });
        }

现在,如果字符串message包含关键字&#34; green&#34;,那么我想将列表框中的项目颜色设置为绿色等等。

如何?

1 个答案:

答案 0 :(得分:2)

你去吧

凭借WPF绑定的强大功能,您可以使用该值绑定到所需的属性Background,隐式转换器将为您完成剩下的工作。

    <DataTemplate>
        <TextBlock Text="{Binding}" Background="{Binding}"/>
    </DataTemplate>

如果您想更改文字颜色,可以选择绑定Foreground


使用转换器

如果简单绑定不够,您可以使用转换器执行自定义转换逻辑,例如将The light is red转换为Brushes.Red

public class MyColorConverter : IValueConverter
{
    public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
    {
        string text = value as string;

        if(text.Contains("red"))
           return Brushes.Red;

        return Brushes.White;
    }

    public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
    {
        return DependencyProperty.UnsetValue;
    }
}

使用

<DataTemplate xmlns:l="your namespace to converter class">
    <DataTemplate.Resources>
        <l:MyColorConverter x:Key="MyColorConverter" />
    </DataTemplate.Resources>
    <TextBlock Text="{Binding}" Background="{Binding Converter={StaticResource MyColorConverter}}"/>
</DataTemplate>