0

我有一个列表框,它显然是通过数据绑定填满了列表项。您可能还知道,您可以使用 listItem 模板标签指定 listItem 的外观,如下所示:

<ListBox.ItemTemplate>
    <TextBlock Name="lblName" Text="{Binding Name}" Foreground="black" />
</ListBox.ItemTemplate>

请注意,listItems Textbloxk 上的前景是黑色的...

现在在我的 C# 代码中,我想动态地将每个 listItems Textblock Foreground 设置为我想要的任何颜色。如何引用特定的 listItems 文本块并设置它的前景?

如果需要更多信息,请询问!提前致谢!

4

2 回答 2

2

你真的需要在代码隐藏中做吗?

首选的解决方案是将Foreground属性绑定到 ViewModel 的 ForegroundColor 属性(如果您使用 MVVM)。

如果您不使用 MVVM 并且不想使用属性“污染”您的模型类Brush,则可以将该属性绑定Foreground到您的类中已有的属性(例如Nameor Age)并使用 aConverter使其成为 a Brush

<ListBox.ItemTemplate>
    <TextBlock Name="lblName" Text="{Binding Name}" Foreground="{Binding Age, Converter={StaticResource AgeToColorConverter}}" />
</ListBox.ItemTemplate>

以及转换器的代码:

public class AgeToColorConverter : IValueConverter
{
    public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
    {
        // Your code that converts the value to a Brush
    }

    public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
    {
        throw new NotImplementedException();
    }
}
于 2013-01-11T08:23:48.497 回答
1

更好和更简单的解决方案是向您的 SolidColorBrush 类型的项目添加一个属性,表示颜色,让我们调用 id ForegroundColor 并使用绑定

<ListBox.ItemTemplate>
    <TextBlock Name="lblName" Text="{Binding Name}" Foreground="{Binding ForegroundColor}" />
</ListBox.ItemTemplate>
于 2013-01-11T08:15:12.387 回答