C# listView 闪烁/替代颜色

标签 c# winforms listview listviewitem

是否可以在 C# 中为 ListView 项设置动画?目的是我有一个异步修改的 ListView,我想平滑地为已修改的项目设置动画,直到用户单击它们。通过这种方式,闪烁的项或任何可以达到目的的项都是已更改但尚未审核的项。

谢谢大家!

更新:对不起,我忘了。以前从未使用过 WPF,我认为现在切换到它为时已晚。我正在使用 winforms。

最佳答案

我不得不做一些与您尝试做的类似的事情,但我没有为 ListView 设置动画,而是在 ListView 中使用自定义复选框布局以使其看起来不同。 ListView 的设计器代码如下所示:

        this.listView1.HeaderStyle = System.Windows.Forms.ColumnHeaderStyle.None;
        this.listView1.Location = new System.Drawing.Point(104, 90);
        this.listView1.MultiSelect = false;
        this.listView1.Name = "listView1";
        this.listView1.Size = new System.Drawing.Size(264, 105);
        this.listView1.Sorting = System.Windows.Forms.SortOrder.Ascending;
        this.listView1.TabIndex = 7;
        this.listView1.UseCompatibleStateImageBehavior = false;
        this.listView1.View = System.Windows.Forms.View.Details;
        this.listView1.MouseClick += new System.Windows.Forms.MouseEventHandler(this.listView1_MouseClick);

然后我声明了一个列表来保存用户的选择。

    private IList<ListViewItem> m_CheckedItems = new List<ListViewItem>();

这是 ListView 的初始化方法。您需要在此处进行操作以获得 ListView 的初始外观。

    private void InitialiseListView(IList<string> data)
    {
        listView1.Items.Clear();
        m_CheckedItems.Clear();
        listView1.Columns.Clear();
        listView1.Columns.Add("Col1");
        listView1.Columns[0].Width = listView1.Width;
        ListView.ListViewItemCollection collection = new ListView.ListViewItemCollection(listView1);
        ImageList images = new ImageList();
        images.Images.Add(global::MyApplication.Properties.Resources.Checkbox_Unchecked);
        images.Images.Add(global::MyApplication.Properties.Resources.Checkbox_Checked);
        listView1.SmallImageList = images;
        foreach (string str in data)
        {
            ListViewItem item = new ListViewItem();
            item.ImageIndex = 0;
            item.Text = str;
            collection.Add(item);
        }
    }

当用户在 ListView 中选择一个选项时触发此事件。选择记录在我上面创建的列表中,并显示选中的图像,这样看起来用户已经选择了该项目。

    private void listView1_MouseClick(object sender, MouseEventArgs e)
    {
        if (e.Button == MouseButtons.Left && listView1.FocusedItem != null)
        {
            if (listView1.FocusedItem.ImageIndex == 1)
            {
                listView1.FocusedItem.ImageIndex = 0;
                m_CheckedItems.Remove(listView1.FocusedItem);
            }
            else
            {
                listView1.FocusedItem.ImageIndex = 1;
                m_CheckedItems.Add(listView1.FocusedItem);
            }
        }
    }

您可能会摆弄这些项目的字体和前景色...... ListView 中的每个项目都是 ListViewItem 类型,因此您可以单独操作它。

希望这能给你一些指导:)

关于C# listView 闪烁/替代颜色,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8181818/

相关文章:

android - ListView 中的项目居中 (Android)

c# - 水平滚动winforms listview

java - 显示多列listview baseAdapter

c# - 没有OpenGL和其他库的粒子系统

c# - 我的代码是在 Web 角色还是网站中运行?

c# - Windows自定义控件如何实现数据绑定(bind)?

c# - 如何阻止 VS Designer 弄乱我已经存在的代码

c# - 为什么我不能直接访问已分配给 WinForms Control.Tag 属性的自定义对象的属性?

c# - 在 Windows 10 更新 1803 之后,我的程序在从网络共享运行时无法打开套接字

c# - C++/CLI clr :safe for C# COM Interop 中的包装器 C++