Решение для режима множественного выбора
Решение от Ephismen выше не работает корректно для ListBox в режиме множественного выбора (например, оно не переключает выбранное состояние элемента при нажатии Ctrl, не отменяет выбор других элементов, когда Ctrl не выключен, ...).
Я бы предложил вместо этого создать собственный ListBoxItem с пользовательским обработчиком щелчка правой кнопкой мыши. Там вы можете смоделировать щелчок левой кнопкой мыши и, таким образом, получить точно такое же поведение:
public class CustomListBoxItem : ListBoxItem
{
protected override void OnMouseRightButtonDown(MouseButtonEventArgs e)
{
OnMouseLeftButtonDown(e);
}
}
Вам также может понадобиться создать простой конвертер для привязки ItemsSource
- вместо стандартного ListBoxItem
, который будет создан по умолчанию, вашим CustomListBoxItem
:
public class ItemsToCustomListBoxItemsConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
if (value == null) return null;
return
from object item in (IEnumerable) value
select new CustomListBoxItem
{
Content = item
};
}
public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
{
throw new InvalidOperationException();
}
}
А вот как будет выглядеть привязка ItemsSource:
<ListBox
...
ItemsSource="{Binding Converter={StaticResource ItemsToCustomListBoxItemsConverter}}"
...>