改变WinForms' ListView选中且未聚焦的高亮颜色

时间:2015-09-14 21:34:28

标签: c# winforms listview

我想将ListViewItem的高亮颜色设置为与ListView当前焦点相同的颜色,即使它不是。

将HideSelection属性设置为False后,当我选择一个项目然后聚焦于另一个视图时,颜色将变灰。我想禁用它。

我该怎么做?

与此WPF相关的问题(包括演示的屏幕截图)类似:WPF ListView Inactive Selection Color

2 个答案:

答案 0 :(得分:7)

由于Windows窗体ListView没有SelectionBackColor或此类属性(据我所知),我认为最简单的方法是:

将列表视图的HideSelection属性设置为true,然后:

private void listView1_SelectedIndexChanged(object sender, EventArgs e)
{
    this.listView1.Items.Cast<ListViewItem>()
        .ToList().ForEach(item =>
        {
            item.BackColor = SystemColors.Window;
            item.ForeColor = SystemColors.WindowText;
        });
    this.listView1.SelectedItems.Cast<ListViewItem>()
        .ToList().ForEach(item =>
        {
            item.BackColor = SystemColors.Highlight;
            item.ForeColor = SystemColors.HighlightText;
        });
}

答案 1 :(得分:0)

与Reza想法相同,但效率更高:

private void uxListViewTest_ItemSelectionChanged(object sender, ListViewItemSelectionChangedEventArgs e) {
    if (e.IsSelected) {
        e.Item.BackColor = SystemColors.Highlight;
        e.Item.ForeColor = SystemColors.HighlightText;
    }
    else {
        e.Item.BackColor = BackColor;
        e.Item.ForeColor = ForeColor;
    }
}