Ceci est un deux-parter. En premier lieu, dans WPF, le contrôle ListBox standard prend automatiquement en charge la recherche en ligne de ses éléments. Il le fait en utilisant la fonction ToString des éléments, ce qui signifie que si vous avez le focus dans une listbox et que vous commencez simplement à taper, il effectuera la recherche la plus à gauche, en mettant en surbrillance les éléments dont ToString correspond à ce que vous avez tapé. Les touches suivantes dans un court laps de temps s'ajoutent à la chaîne de recherche (c.-à-d. 'A' suivi de 'S') et 'A' de gauche, alors que 'A' marque une pause, puis 'S'Comment implémentez-vous la recherche en ligne personnalisée dans un ItemsControl?
Le problème est que ce mécanisme semble dépendre uniquement de la valeur retournée par ToString, ce qui dans certains cas est quelque chose sur lequel nous ne pouvons pas nous appuyer.
La deuxième partie de ceci est que le comportement semble seulement être présent dans un ListBox, mais aucun autre objet ItemsControl (ou hiérarchique comme un TreeView.) Sans avoir à réécrire cette fonctionnalité à partir de zéro, y at-il un moyen facile de l'ajouter à un ItemsControl?
Je dirais que non. 'ListBox'es contiennent le plus souvent du texte, de sorte que la fonctionnalité est logique, mais' ItemsControl' est généralement censé contenir des objets et donc la fonctionnalité de recherche par défaut dans 'ItemsControl' est moins logique. Vous avez juste besoin de faire un filtrage de base de vos données ... il devrait prendre plus de 10 lignes de code ou plus, donc ce n'est pas difficile. – Sheridan
Qu'en est-il de la première partie de ma question ... qui aiderait à aborder la deuxième partie. Et votre réponse ignore complètement les modèles de données qui sont régulièrement utilisés avec ListBoxes. Même l'utilisation de DisplayMember crée implicitement un modèle de données désynchronisé avec ToString rendant cette fonctionnalité potentiellement inutile, sans parler de la confusion avec un utilisateur qui obtient un comportement de sélection impaire (sans filtrage) et qui ne sait pas pourquoi. – MarqueIV