Pour une raison très spécifique, je veux sélectionner ListViewItem
s sur le bouton de la souris, pas réellement sur le bouton de la souris. Je veux que ce comportement soit intégré dans le contrôle. Est-il possible d'y parvenir? quelqu'un peut-il donner un indice?WPF Listview modification
Répondre
réponse du P. Aviad est une bonne et une utilisation intelligente des propriétés attachées, mais je tendance à utiliser une technique différente la plupart du temps:
- ListViewItem Sous-classe.
- Remplacez OnMouseLeftButtonDown et OnMouseRightButton pour ne rien faire.
- Substituez OnMouseLeftButtonUp/OnMouseRightButtonUp pour appeler base.OnMouseLeftButtonDown/base.OnMouseRightButtonDown.
- Sous-classe ListView.
- Remplacer GetContainerForItemOverride() pour retourner votre ListViewItem override
Cela me semble plus facile à que de souscrire à des événements ItemContainer et l'ajout de gestionnaires dynamiquement.
Voici ce qu'il ressemble à:
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();
}
}
J'aime cette technique parce qu'il ya moins de code impliqué.
Oui, c'est certainement possible en utilisant les propriétés attachées. Définissez une propriété attachée appelée SelectOnMouseUp
et lorsqu'elle est définie sur true, connectez-vous à vos événements ItemsContainerGenerator
pour découvrir à quel moment un nouveau conteneur d'éléments est ajouté. Ensuite, lorsque vous obtenez un événement pour un nouveau conteneur d'articles, connectez-vous dans PreviewMouseDown
et ignorez-le (définissez e.Handled
sur true), puis connectez-vous à son événement MouseUp
et effectuez la sélection (définissez IsSelected
à true
).
Merci pour la réponse, est-ce possible dans XAML de toute façon? –
Vous ne pouvez pas 'masquer' le comportement normal de 'MouseDown' dans du XAML pur. –
+1 pour une utilisation intelligente des propriétés attachées et 'ItemContainerGenerator', mais voir aussi ma réponse qui résout le problème plus simplement en utilisant' GetContainerForItemOverride' –
- 1. WPF Listview
- 2. WPF ListView ItemTemplate interroge
- 3. Événement WPF Listview SelectionChanged
- 4. WPF ListView Thousand Separator
- 5. WPF ListView Headers
- 6. WPF ListView double clic
- 7. WPF ListView Cursor Change
- 8. Redimensionner listview dans WPF
- 9. WPF DataGrid bidimensionnel/ListView?
- 10. WPF ListView Afficher l'image
- 11. WPF contextmenu et ListView
- 12. WPF Listview databinding
- 13. WPF ListView MouseOver Article
- 14. WPF ListView setting SelectedItem
- 15. WPf Datepicker Modification d'entrée
- 16. Modification d'éléments ListView au moment de l'exécution
- 17. Modification du contenu d'un ListView (Android)
- 18. Méthode de modification de classes dans Listview
- 19. Modification de Java ListView en XML
- 20. Comment filtrer ListView dans WPF?
- 21. WPF listview glisser sans désélection
- 22. WPF ListView SelectedValue non défini
- 23. WPF ListView défilement non intégral
- 24. WPF Listview lié avec Hashtable
- 25. C#/WPF: Imprimer un ListView
- 26. Liaison Wpf Combobox dans ListView
- 27. Création de ListView dans WPF?
- 28. WPF ListView élément sélectionné problème
- 29. WPF Listview liant à ItemSource?
- 30. WPF ListView Afficher l'élément sélectionné
Bonne réponse, j'ai réussi à implémenter ma solution de propriété jointe, mais il s'est avéré juste un peu trop compliqué et difficile que j'espérais! :) –