我如何在列表视图中取消选择项目

本文关键字:取消 选择 项目 视图 列表 | 更新日期: 2023-09-27 18:05:54

我有一个ListView与几个项目在它。当ListView失去焦点时,最后选中的ListViewItem仍然是"选中的",背景为灰色。
我想在ListView上实现这个。FocusLost,选择消失了,因此ListView也消失了。SelectedIndexChanged事件将发生。
什么好主意吗?

我如何在列表视图中取消选择项目

假设您正在从父窗体/控件访问ListView。

你可以在form的/control的构造函数/load事件中添加这段代码:

this.myListView.LostFocus += (s, e) => this.myListView.SelectedIndices.Clear();

在你的例子中,你可以用:

代替那个委托
if (this.myListView.SelectedIndices.Count > 0)
    for (int i = 0; i < this.myListView.SelectedIndices.Count; i++)
    {
        this.myListView.Items[this.myListView.SelectedIndices[i]].Selected = false;
    }

你可以给代码一个更好的形式,顺便说一下。

myListView.SelectedItems.Clear();

我知道这有点晚了,但如果有人需要解决方案,我想添加到解决方案中。

您需要将Focused属性设置为false以避免取消选择的项目具有焦点。

for (int i = 0; i < this.myListView.SelectedIndices.Count; i++)
{
    this.myListView.Items[this.myListView.SelectedIndices[i]].Selected = false;
    this.myListView.Items[this.myListView.SelectedIndices[i]].Focused = false;
}

另一种有效的方法是:

foreach (ListViewItem i in myListView.SelectedItems)
{
    i.Selected = false;
}

你可以试试:

MyList.ItemSelected += (sender, e) => {
    ((ListView)sender).SelectedItem = null;
};

或者如果你在View代码中创建了OnSelection (xaml.cs):

 private void OnSelection(object sender, SelectedItemChangedEventArgs e)
        {
           ((ListView)sender).SelectedItem = null;
        }

这样比较容易。

this.myListView.SelectedIndex = -1;
this.myListView.Update();

如果您正在使用EditItemTemplate,而不是ItemTemplate,您可能一直在试图弄清楚为什么ListView1。selecteindex = -1;一直没起作用。这是因为你需要使用ListView1。

if (listView1.SelectedItems.Count > 0)
    for (int i = 0; i < listView1.SelectedItems.Count; i++)
    {
        listView1.SelectedItems[i].Selected = false;
    }