我有一个包含几个项目的 ListView。当 ListView 失去焦点时,最后选定的 ListViewItem 仍以灰色背景“选定”。
我希望在 ListView.FocusLost 事件发生时取消选择,这样就会触发 ListView.SelectedIndexChanged 事件。
有什么想法吗?
我正在使用 .NET CF 3.5。
我有一个包含几个项目的 ListView。当 ListView 失去焦点时,最后选定的 ListViewItem 仍以灰色背景“选定”。
我希望在 ListView.FocusLost 事件发生时取消选择,这样就会触发 ListView.SelectedIndexChanged 事件。
有什么想法吗?
我正在使用 .NET CF 3.5。
假设你正在从父表单/控件中访问ListView。
你可以在表单或控件的构造函数/加载事件中添加以下代码:
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;
}
顺便说一下,你可以让这段代码的形式更加美观。
Clear()
ж–№жі•гЂ‚ - Zeemeethis.myListView.SelectedIndices.Count
数量就会减去1... - LearnermyListView.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;
}
这很简单。
this.myListView.SelectedIndex = -1;
this.myListView.Update();
MyList.ItemSelected += (sender, e) => {
((ListView)sender).SelectedItem = null;
};
如果您在视图的代码后台(xaml.cs)中创建了OnSelection,则可以使用以下方式:
private void OnSelection(object sender, SelectedItemChangedEventArgs e)
{
((ListView)sender).SelectedItem = null;
}
问候
这样做:
foreach (ListViewItem i in myListView.SelectedItems)
{
i.Selected = false;
}
i.IsSelected = false;
而不是 i.Selected = false;
。 - Joggeif (listView1.SelectedItems.Count > 0)
for (int i = 0; i < listView1.SelectedItems.Count; i++)
{
listView1.SelectedItems[i].Selected = false;
}