我有一个流量申请。灯光状态在列表框中更新。
<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;,那么我想将列表框中的项目颜色设置为绿色等等。
如何?
答案 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>