Подтвердить что ты не робот

Щелкните правой кнопкой мыши, чтобы выбрать элементы в ListBox

Я пытаюсь сделать список элементов, которые вы можете сделать несколькими действиями, щелкнув правой кнопкой мыши и получив контекстное меню. Я закончил это, никаких проблем.

Но я хотел бы иметь его так, чтобы при щелчке правой кнопкой мыши по элементу вместо того, чтобы оставить выбранный элемент, выберите элемент, над которым находится мышь.

Я изучил этот и другие связанные вопросы, и я попытался использовать indexFromPoint (который я нашел в своих исследованиях), но всякий раз, когда я нажимаю правой кнопкой мыши на элементе, он всегда просто очищает выбранный элемент и не показывает в контекстном меню, так как я настроил его так, чтобы он не отображался, если нет выбранного элемента.

Вот код, который я сейчас использую:

ListBox.SelectedIndex = ListBox.IndexFromPoint(Cursor.Position.X, Cursor.Position.Y);
4b9b3361

Ответ 1

Обработайте ListBox.MouseDown и выберите элемент там. Вот так:

private void listBox1_MouseDown(object sender, MouseEventArgs e)
{
    listBox1.SelectedIndex = listBox1.IndexFromPoint(e.X, e.Y);
}

Ответ 2

этот работает...

this.ListBox.MouseUp += new System.Windows.Forms.MouseEventHandler(this.List_RightClick);

private void List_RightClick(object sender, MouseEventArgs e)
{

    if (e.Button == MouseButtons.Right)
    {
        int index = this.listBox.IndexFromPoint(e.Location);
        if (index != ListBox.NoMatches)
        {
            listBox.Items[index];
        }
    }

}

Ответ 3

Можно также получить такое же поведение, установив событие MouseRightButtonUp во всем списке:

private void AccountItemsT33_OnMouseRightButtonUp(object sender, MouseButtonEventArgs e)
{
    // If have selected an item via left click, then do a right click, need to disable that initial selection
    AccountItemsT33.SelectedIndex = -1;
    VisualTreeHelper.FindElementsInHostCoordinates(e.GetPosition(null), (sender as ListBox)).OfType<ListBoxItem>().First().IsSelected = true;
}