Мне пришлось сделать что-то похожее на то, что вы пытаетесь сделать, но вместо анимации 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. Вам нужно манипулировать здесь для первоначального вида вашего списка.
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);
}
}
Это событие срабатывает, когда пользователь выбирает параметр в представлении списка. Выбор записывается в список, который я создал выше, и проверенное изображение отображается так, как будто пользователь выбрал элемент.
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);
}
}
}
Вероятно, вы можете поиграть со шрифтами и передним цветом этих элементов ... Каждый элемент в представлении списка имеет тип ListViewItem, поэтому вы можете индивидуально манипулировать им.
Надеюсь, это даст вам некоторое направление:)