いくつかのアイテムを含むListViewがあります。 ListViewがフォーカスを失っても、最後に選択されたListViewItemは、灰色の背景で「選択」されたままです。
ListView.FocusLostでそれを実現したいので、選択が失われるため、ListView.SelectedIndexChangedイベントが発生します。
何か案は?
.NET CF3.5を使用しています。
親フォーム/コントロールからListViewにアクセスしているとします。
このコードは、フォームの/ 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;
}
これは簡単です。
this.myListView.SelectedIndex = -1;
this.myListView.Update();
ItemTemplateではなくEditItemTemplateを使用している場合は、ListView1.SelectedIndex = -1;の理由を理解しようとしている可能性があります。動作していません。これは、ListView1.EditIndex = -1を使用する必要があるためです。
あなたはそれを試すことができます:
MyList.ItemSelected += (sender, e) => {
((ListView)sender).SelectedItem = null;
};
または、ビューコードbehind(xaml.cs)でOnSelectionを作成している場合:
private void OnSelection(object sender, SelectedItemChangedEventArgs e)
{
((ListView)sender).SelectedItem = null;
}
よろしく