如何显示不同颜色的WPF ListView中的字符串?
问题描述:
我想用字符串填充WPF ListView使用数据绑定。我的代码看起来像这样(和工作;!)):如何显示不同颜色的WPF ListView中的字符串?
的XAML:
<ListView
ItemsSource="{Binding Entries}">
</ListView>
我留下了一些代码,一个更好的概述。 参赛作品是IList<string>
。
到目前为止,一切工作正常。现在出现这个问题:条目中的字符串可能包含一个特定的关键字,该关键字指示该字符串想要在ListView中以红色背景显示。假设我们有一个方法GetBackground(string s),它根据字符串返回一个Color。
如何使ListView以正确的颜色显示其项目。 我的第一个想法是有一个转换器使用上述方法将我的字符串转换为颜色。我将在哪里添加此转换器,以及如何将字符串作为参数传递给转换器?我的第一个想法是:
<ListView
ItemsSource="{Binding Entries, Converter={StaticResource entryToColourConverter},
ConverterParameter=???}"
</ListView>
有没有人有一个想法如何做到这一点?我在正确的轨道上吗?
最良好的祝愿, 基督教
编辑1: 改变了代码(作为第一步)朝向:
<UserControl.Resources>
<DataTemplate x:Key="entryTemplate">
<TextBlock
Text="{Binding}"
Background="Green"/>
</DataTemplate>
</UserControl.Resources>
...
<ListView
ItemsSource="{Binding Entries}"
ItemTemplate="{StaticResource entryTemplate}>
</ListView>
然而,这并不在所有的工作。即使我将文本更改为某个静态值,结果仍然与前面的代码相同。
编辑2: 我发现这个问题,我的代码是这样的:
<ListView x:Name="lvEntries"
ItemTemplate="{StaticResource EntriesTemplate}"
ItemsSource="{Binding Entries, NotifyOnTargetUpdated=True}">
<ListView.View>
<GridView x:Name="gvEntries">
<GridViewColumn
HeaderContainerStyle="{StaticResource hcs}"
Header="Entry"
TextBlock.TextAlignment="Left">
</GridViewColumn>
</GridView>
</ListView.View>
</ListView>
这ListView.View是问题。消除这一切,一切正常! :)现在我必须找出如何解决这个没有ListView.View
答
<Window.Resources>
<local:EntryToBackgroundConverter x:Key="EntryToBackgroundConverter"/>
<DataTemplate x:Key="EntryTemplate">
<TextBlock Text="{Binding .}" Background="{Binding ., Converter={StaticResource EntryToBackgroundConverter}}"/>
</DataTemplate>
</Window.Resources>
<Grid>
<ListView ItemsSource="{Binding Entries}" ItemTemplate="{StaticResource EntryTemplate}"></ListView>
</Grid>
转换器:
public class EntryToBackgroundConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
string stringValue = value as string;
if (string.IsNullOrEmpty(stringValue))
return Brushes.Black;
if (stringValue == "foreach")
return Brushes.Blue;
if (stringValue == "if")
return Brushes.Blue;
return Brushes.Black;
}
public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
return value;
}
}
你右边线......这样的事情应该工作...
答
的ListView控件创建项目模板,然后配合(例如)标签的文本颜色为Entrie财产
不知何故ItemTemplate中似乎没有被使用。我编辑了我的文章,并添加了ItemTemplate – Christian 2011-02-18 09:19:55
嗯,转换器没有帮助? – 2011-02-18 09:22:35