Pergunta

Por uma razão muito específica eu quero selecionar ListViewItems no botão do mouse para cima, não realmente no botão do mouse pressionado. Eu quero esse comportamento para ser incorporado no controle. É possível conseguir isso? Alguém pode dar dica?

Foi útil?

Solução

A resposta de Aviad P. é um bom e um uso inteligente das propriedades anexadas, mas eu tendem a usar uma técnica diferente na maioria das vezes:

  1. subclasse ListViewItem.
  2. Substituir OnMouseLeftButtonDown e OnMouseRightButton para não fazer nada.
  3. Substituir OnMouseLeftButtonUp / OnMouseRightButtonUp chamar base.OnMouseLeftButtonDown / base.OnMouseRightButtonDown.
  4. subclasse ListView.
  5. Substituir GetContainerForItemOverride () para retornar o ListViewItem override

Isso parece mais fácil para mim do que a subscrição de eventos ItemContainer e adicionando manipuladores de forma dinâmica.

Este é o que parece:

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();
  }
}

Eu como esta técnica, porque há menos código envolvido.

Outras dicas

Sim, é definitivamente possível usando propriedades anexadas. Definir uma propriedade chamada SelectOnMouseUp anexo e quando é definido como verdadeiro, gancho para seus eventos ItemsContainerGenerator para descobrir quando um novo recipiente item é adicionado. Então, quando você recebe um evento para um novo recipiente de item, gancho em seu PreviewMouseDown e ignorá-lo (conjunto e.Handled como true), e gancho para o evento MouseUp e realizar a seleção (set IsSelected para true).

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top