Вопрос

По очень конкретной причине я хочу выбрать ListViewItems при нажатии кнопки мыши вверх, а не при нажатии кнопки мыши.Я хочу, чтобы это поведение было встроено в элемент управления.Возможно ли этого добиться?может кто-нибудь подсказать?

Это было полезно?

Решение

Ответ Авиада П. хороший и умное использование присоединенных свойств, но большую часть времени я склонен использовать другой метод:

  1. Подкласс ListViewItem.
  2. Переопределите OnMouseLeftButtonDown и OnMouseRightButton, чтобы ничего не делать.
  3. Переопределите OnMouseLeftButtonUp/OnMouseRightButtonUp для вызова base.OnMouseLeftButtonDown/base.OnMouseRightButtonDown.
  4. Подкласс ListView.
  5. Переопределите 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();
  }
}

Мне нравится этот метод, потому что здесь требуется меньше кода.

Другие советы

Да, это определенно возможно, используя прикрепленные свойства.Определите присоединенное свойство под названием SelectOnMouseUp и когда для него установлено значение true, подключитесь к своему ItemsContainerGenerator события, позволяющие обнаружить добавление нового контейнера элементов.Затем, когда вы получите событие для контейнера нового элемента, подключитесь к его PreviewMouseDown и игнорировать его (установить e.Handled значение true) и подключиться к его MouseUp событие и выполнить выбор (установить IsSelected к true).

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top