C# 动态更改代码隐藏(WPF)中列表框项目的颜色
我有一个交通申请。灯光状态在列表框中更新C# 动态更改代码隐藏(WPF)中列表框项目的颜色,c#,wpf,listbox,C#,Wpf,Listbox,我有一个交通申请。灯光状态在列表框中更新 <ListBox x:Name="lbxCallProgress" ItemsSource="{Binding Messages,Mode=TwoWay}" Height="373" FontSize="8" ScrollViewer.VerticalScrollBarVisibility="Visible"> <ListBox.ItemTemplate> <DataTemplate
<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>
void UpdateMessage(string message)
{
try
{
Dispatcher.BeginInvoke((Action)delegate()
{
Dispatcher.BeginInvoke(new Action(() => { this.Messages.Add(message); }));
});
}
现在,如果字符串message
包含关键字“green”,那么我想将列表框上的项目颜色设置为绿色,以此类推
怎么做 给你
借助WPF绑定的强大功能,您可以使用该值绑定到所需的属性Background
,隐式转换器将为您完成其余的工作
<DataTemplate>
<TextBlock Text="{Binding}" Background="{Binding}"/>
</DataTemplate>
用法
前台=“{Binding}”字符串是可变的吗?或者它们在整个生命周期内都会保持不变?@Herdo,是的,字符串是可变的。为什么要使用委托添加到消息中?@Blam,我不知道。我从某处借用了这段代码。有一个隐式转换器,可以自动将“随机(下/上)”大小写颜色名称(作为普通字符串)转换为System.Windows.Media.Brush
?嗨,我需要更多的代码。颜色可以是黄色、绿色和红色。例如,如果消息
是“灯是红色的”,那么如何将其绑定到红色?如果消息
是“10秒后,颜色将为绿色”,那么如何?@Love,在这种情况下,转换器可以帮助您。您可能需要定义图案,例如在何处找到颜色。例如如何识别颜色红色
从句子灯是红色的@pushpraj,我想要类似的东西,如果message.Contains(“red”)
,然后更改颜色。@Herdo隐式转换器能够从大写或小写颜色名称转换,只要它们来自颜色名称列表。您可以参考以下列表:
<DataTemplate>
<TextBlock Text="{Binding}" Background="{Binding}"/>
</DataTemplate>
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>