Щелкните правой кнопкой мыши, чтобы выбрать элементы в ListBox - PullRequest
22 голосов
/ 10 февраля 2012

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

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

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

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

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

Ответы [ 3 ]

35 голосов
/ 10 февраля 2012

Ручка ListBox.MouseDown и выберите предмет там.Как это:

private void listBox1_MouseDown(object sender, MouseEventArgs e)
{
    listBox1.SelectedIndex = listBox1.IndexFromPoint(e.X, e.Y);
}
8 голосов
/ 20 июня 2012

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

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];
        }
    }

}
0 голосов
/ 15 апреля 2013

Также можно получить такое же поведение, установив событие 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;
}
...