是否可以在C#中为ListView
项设置动画?目的是我有一个异步修改的ListView,我想平滑地动画修改过的项目,直到用户点击它们。这种方式闪烁的物品,或任何可以做到的伎俩,都是尚未被审查的物品。
谢谢你们!
更新:对不起,我忘了。从来没有使用过WPF,我认为现在切换到它已经太晚了。我正在使用winforms。
答案 0 :(得分:2)
我必须做类似于你想要做的事情,但我没有动画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类型,因此您可以单独操作它。
希望这会给你一些方向:)
答案 1 :(得分:1)
您可以使用MyListView:ListView并覆盖OnDrawSubItem
。让e.Item.Tag
存储“Clicked”状态并根据其状态更新背景。
public partial class ObjectListView : ListView {
(....)
protected override void OnDrawSubItem(DrawListViewSubItemEventArgs e)
{
if(bool)e.Item.Tag)
(...) animate
}
答案 2 :(得分:1)