更改ListViewItem文本颜色

4

我目前正在以以下方式编程创建ListViewItems:

ListView.Items.Add(New With {Key .Name = ItemName, Key .DateCreated = ItemDateCreated, Key .Description = ItemDescription})

我没有找到改变项目颜色的方法,因为我没有找到除了这种方式之外创建带有子项的 ListViewItem 的其他方法。

是否可能更改项目文本的颜色(如果不可能,则更改背景),同时仍然能够拥有子项?

编辑 - 这是我的 XAML:

<ListView x:Name="ListView" Opacity="0.75">
    <ListView.View>
        <GridView x:Name="ListViewGridView">
            <GridViewColumn Header="Name" Width="155" DisplayMemberBinding="{Binding Path=Name}"/>
            <GridViewColumn Header="Date Created" Width="150" DisplayMemberBinding="{Binding Path=DateCreated}"/>
            <GridViewColumn Header="Description" Width="250" DisplayMemberBinding="{Binding Path=Description}"/>
        </GridView>
    </ListView.View>
</ListView>

你能设置ListView正在使用的ItemTemplate中的前景属性吗?看到你的XAML会非常有帮助。 - BradleyDotNET
我添加了 ListView XAML。 - Nicolas Gnyra
希望我的回答真正回答了你的问题,如果你需要更多/不同的信息,请告诉我。 - BradleyDotNET
1个回答

7
以下示例将第一列的文本设置为绿色。顺便说一句,你应该把“名称”、“创建日期”和“描述”字段包装成一个实际的对象,并使用它来创建带有子项的ListViewItem,而不是每次尝试创建一个新的弱类型对象(如果您感兴趣,我已经这样做并附上了代码,显然,您可以使用任何数据类型作为成员(不仅仅是字符串),但我正在快速编码)。
关于DataTemplates的信息: http://msdn.microsoft.com/en-us/library/system.windows.datatemplate(v=vs.110).aspx XAML:
<ListView x:Name="ListView" Opacity="0.75">
        <ListView.View>
            <GridView x:Name="ListViewGridView">
                <GridViewColumn Header="Name" Width="155">
                    <GridViewColumn.CellTemplate>
                        <DataTemplate>
                            <TextBlock Text="{Binding Path=Name}" Foreground="{Binding Color}"/>
                        </DataTemplate>
                    </GridViewColumn.CellTemplate>
                </GridViewColumn>
                <GridViewColumn Header="Date Created" Width="150" DisplayMemberBinding="{Binding Path=DateCreated}"/>
                <GridViewColumn Header="Description" Width="250" DisplayMemberBinding="{Binding Path=Description}"/>
            </GridView>
        </ListView.View>
    </ListView>

C#:

// In method somewhere, won't work otherwise
ListView.Items.Add(new DataClass("Bob", "12/04/2013", "Person", Color.Green));

public class DataClass
{
    public String Name { get; set; }
    public String DateCreated { get; set; }
    public String Description { get; set; }
    public SolidBrushColor { get; set; }
    public DataClass (string Name, String Date, String Desc, SolidBrushColor textColor)
    {
        this.Name = Name;
        this.DateCreated = Date;
        Description = Desc;
        Color = textColor;
    }
}

糟糕,我的表达不够清晰。我想要做的是能够设置 C# 代码内部的文本颜色,而不是在 XAML 中设置。尽管 DataClass 是一个需要考虑的有用事物。另外,这个链接对我来说无法打开... - Nicolas Gnyra
没事了,我已经找到答案了。只需要将 Foreground="Green" 替换为 Foreground="{Binding Color}",并相应地编辑代码即可。你能把这个加入到你的回答中吗?如果不行,我会自己发一个回答。 - Nicolas Gnyra
我修改了我的代码以反映你的更改,很高兴你找到了你要寻找的解决方案。 - BradleyDotNET
请注意,您可能希望考虑使用DataTrigger来设置颜色,而不是通过编程方式进行设置。当使用WPF时,UI特定的逻辑(颜色、可见性等)通常应该在标记中。 - BradleyDotNET

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接