46 votes

WPF: Zone de texte de saisie semi-automatique, ...encore

Cette autre question SO porte sur une zone de texte de saisie semi-automatique en WPF. Plusieurs personnes ont développé cela, et l'une des réponses données là-bas suggère cet article sur codeproject.

Mais je n'ai pas trouvé de zone de texte de saisie semi-automatique en WPF qui soit comparable à celle de WinForms. L'exemple de codeproject fonctionne plus ou moins, ...

texte alternatif

...mais

  • il n'est pas structuré en tant que contrôle réutilisable ou DLL. C'est du code que je dois intégrer dans chaque application.
  • Cela fonctionne uniquement avec des répertoires. Il n'a pas de propriétés pour définir si la source de saisie semi-automatique est uniquement des répertoires du système de fichiers, ou des fichiers système, ou ....etc. Je pourrais écrire du code pour cela, bien sûr, mais... J'aimerais plutôt utiliser le code déjà écrit par quelqu'un d'autre.
  • Il n'a pas de propriétés pour définir la taille de la fenêtre contextuelle, etc.
  • il y a une liste déroulante qui présente les complétions possibles. En naviguant dans cette liste, la zone de texte ne change pas. Taper un caractère tout en étant concentré dans la liste ne provoque pas la mise à jour de la zone de texte.
  • changer le focus de la liste déroulante ne fait pas disparaître la liste déroulante contextuelle. C'est déroutant.

Donc, ma question :

*Est-ce que quelqu'un a une zone de texte de saisie semi-automatique WPF GRATUITE qui fonctionne, et qui offre une expérience utilisateur de qualité ?*


RÉPONSE

Voici comment je l'ai fait :

.0. obtenir le WPF Toolkit

.1. exécuter le MSI pour le WPF Toolkit

.2. Dans Visual Studio, faites glisser/déposez depuis la boîte à outils - spécifiquement le groupe de visualisation des données - dans le concepteur d'interface utilisateur. Cela ressemble à ceci dans la boîte à outils VS :

texte alternatif

Si vous ne voulez pas utiliser le concepteur, créez le xaml à la main. Cela ressemble à ceci :


...où l'espace de noms toolkit est mappé de cette manière :

xmlns:toolkit="clr-namespace:System.Windows.Controls;assembly=System.Windows.Controls.Input.Toolkit"

.3. Fournir le code pour l'événement Populating. Voici ce que j'ai utilisé :


private void tbAssembly_Populating(object sender, System.Windows.Controls.PopulatingEventArgs e)
{
    string text = tbAssembly.Text;
    string dirname = Path.GetDirectoryName(text);

    if (Directory.Exists(Path.GetDirectoryName(dirname)))
    {
        string[] files = Directory.GetFiles(dirname, "*.*", SearchOption.TopDirectoryOnly);
        string[] dirs = Directory.GetDirectories(dirname, "*.*", SearchOption.TopDirectoryOnly);
        var candidates = new List();

        Array.ForEach(new String[][] { files, dirs }, (x) =>
            Array.ForEach(x, (y) =>
                      {
                          if (y.StartsWith(dirname, StringComparison.CurrentCultureIgnoreCase))
                              candidates.Add(y);
                      }));

        tbAssembly.ItemsSource = candidates;
        tbAssembly.PopulateComplete();
    }
}

Cela fonctionne, exactement comme vous le devriez vous attendre. Cela donne une impression professionnelle. Il n'y a aucune des anomalies que le contrôle de codeproject présente. Voici à quoi cela ressemble :

texte alternatif


Merci à Matt pour le pointeur vers le toolkit WPF.

32voto

Matt Hamilton Points 98268

La dernière version du WPF Toolkit inclut un AutoCompleteBox. Il s'agit d'un ensemble de contrôles gratuits de Microsoft, certains devant être inclus dans .NET 4.

Jeff Wilcox - Présentation de l'AutoCompleteBox

0 votes

Sons intrigants, Matt. Y a-t-il un guide ou un exemple sur l'utilisation de AutoCompleteBox ? J'ai trouvé le DLL qui le contient. Quel xmlns dois-je utiliser dans XAML ? Comment l'utiliser réellement ?

0 votes

Notez que le lien de l'article de blog que je viens d'ajouter parle de Silverlight, mais AutoCompleteBox est également disponible pour WPF.

0 votes

Le WPF Toolkit sur CodePlex est mort, mais il existe plusieurs forks sur GitHub, si quelqu'un en a besoin : jogibear9988/wpftoolkit, WPFToolkit.DataVisualization, theonlylawislove/WPFToolkit, jrwren/wpftoolkit.

17voto

Cheeso Points 87022

Voici comment je l'ai fait:

.1. exécutez le MSI pour le WPF Toolkit

.2. Dans Visual Studio, faites glisser/déposez depuis la boîte à outils - en particulier le groupe Visualisation des données - dans le concepteur d'interface utilisateur. Cela ressemble à ceci dans la boîte à outils VS:

texte alternatif

Ou, créez le xaml manuellement. Cela ressemble à ceci:


...où l'espace de noms toolkit est défini de cette manière:

xmlns:toolkit="clr-namespace:System.Windows.Controls;assembly=System.Windows.Controls.Input.Toolkit"

.3. Fournissez le code pour l'événement Populating. Voici ce que j'ai utilisé:


private void tbAssembly_Populating(object sender, System.Windows.Controls.PopulatingEventArgs e)
{
    string text = tbAssembly.Text;
    string dirname = Path.GetDirectoryName(text);

    if (Directory.Exists(Path.GetDirectoryName(dirname)))
    {
        string[] files = Directory.GetFiles(dirname, "*.*", SearchOption.TopDirectoryOnly);
        string[] dirs = Directory.GetDirectories(dirname, "*.*", SearchOption.TopDirectoryOnly);
        var candidates = new List();

        Array.ForEach(new String[][] { files, dirs }, (x) =>
            Array.ForEach(x, (y) =>
                      {
                          if (y.StartsWith(dirname, StringComparison.CurrentCultureIgnoreCase))
                              candidates.Add(y);
                      }));

        tbAssembly.ItemsSource = candidates;
        tbAssembly.PopulateComplete();
    }
}

Merci à Matt pour l'indication sur le toolkit WPF.

2voto

Troy Points 43

J'utilise l'Intellibox dans mon projet interne. http://intellibox.codeplex.com/

Je trouve son utilisation du pattern Provider pour la recherche très intuitive.

La réponse de Rake fournit un exemple de son utilisation, et comme il le souligne, il a connu certaines évolutions fin de l'année dernière (bien que ce soit bien après la dernière fois que je l'ai utilisé).

1 votes

intellibox.codeplex.com semble avoir été mis à jour aussi récemment que le 1 octobre 2013 et contient un seul contrôle. (Merci, Rake)

0 votes

Oui, je n'ai pas travaillé là-dessus depuis un moment, c'est bien de savoir qu'il a vu un peu d'attention depuis. Merci!

2voto

Rake Points 31

Mindscape propose également 3 contrôles gratuits, y compris un Textbox d'auto-complétion WPF

http://intellibox.codeplex.com/ semble avoir été mis à jour aussi récemment que le 1er octobre 2013 et contient le contrôle unique. J'aurais ajouté un commentaire à la réponse de Troy, mais je n'ai pas assez de réputation. J'ai failli l'ignorer à cause de ce commentaire.

Exemple d'utilisation de la documentation:

2voto

Vous pouvez essayer la zone de texte de saisie semi-automatique WPF sur CodePlex ici : https://wpfautocomplete.codeplex.com/

2 votes

Je vois que c'est votre projet et cela semble bon, mais vous devriez faire plus que simplement ajouter un lien ici. Ajoutez un peu de code d'exemple, des instructions, montrez pourquoi c'est une solution possible pour l'OP. StackOverflow est essentiellement une wiki de questions-réponses, donc les utilisateurs s'attendent à voir suffisamment de détails dans la réponse pour voir que cette solution fonctionnera pour eux sans être redirigés de ce site. N'hésitez pas à diriger les gens vers le site codeplex pour plus d'informations.

1 votes

J'ai passé ma matinée à vérifier les cases de texte de saisie semi-automatique que j'ai trouvées à différents endroits sur le net. Celui-ci est de loin le meilleur et c'est celui que j'utiliserai dans mon projet.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X