gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-01 19:02:57 24 4
gpt4 key购买 nike

我想使用数据绑定(bind)用字符串填充 WPF ListView。我的代码如下所示(并且可以工作!;)):

Xaml:

<ListView 
ItemsSource="{Binding Entries}">
</ListView>

为了更好地概述,我省略了一些代码。条目是IList<string> .

到目前为止,一切正常。现在问题来了:Entries 中的字符串可能包含特定的关键字,表明该字符串希望在 ListView 中以红色背景显示。假设我们有一个 GetBackground(string s) 方法,它根据字符串返回颜色。

如何使 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;
}
}

你的思路是正确的...类似这样的东西应该有效...

关于wpf - 如何在WPF ListView中以不同的颜色显示字符串?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5039280/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com