Ответ Авиад П. - хороший и умное использование прикрепленных свойств, но большую часть времени я склонен использовать другую технику:
- Подкласс ListViewItem.
- Переопределите OnMouseLeftButtonDown и OnMouseRightButton, чтобы ничего не делать.
- Переопределите OnMouseLeftButtonUp / OnMouseRightButtonUp для вызова base.OnMouseLeftButtonDown / base.OnMouseRightButtonDown.
- Подкласс ListView.
- Переопределить GetContainerForItemOverride () для возврата переопределения ListViewItem
Это кажется мне проще, чем подписка на события ItemContainer и динамическое добавление обработчиков.
Вот как это выглядит:
public class MouseUpListViewItem : ListViewItem
{
protected override void OnMouseLeftButtonDown(MouseButtonEventArgs e) {}
protected override void OnMouseRightButtonDown(MouseButtonEventArgs e) {}
protected override void OnMouseLeftButtonUp(MouseButtonEventArgs e)
{
base.OnMouseLeftButtonDown(e);
}
protected override void OnMouseRightButtonUp(MouseButtonEventArgs e)
{
base.OnMouseRightButtonDown(e);
}
}
public class MouseUpListView : ListView
{
protected override DependencyObject GetContainerForItemOverride()
{
return new MouseUpListViewItem();
}
}
Мне нравится эта техника, потому что задействовано меньше кода.