如何在WPF ListView中以不同的颜色显示字符串?

时间:2011-02-18 08:54:19

标签: wpf listview converter

我想使用数据绑定用字符串填充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

的情况下解决这个问题

2 个答案:

答案 0 :(得分:4)

<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;
    }
}

你说的是正确的......这样的事情应该有用......

答案 1 :(得分:0)

为ListView创建项目模板,然后将(例如)label的文本颜色绑定到Entrie属性

相关问题