Boîte textuelle autocomplète dans WPF

Est-il possible de faire une zone de texte de saisie semi-automatique dans WPF?

j'ai trouvé un exemple où une boîte bascule est utilisée et le triangle est enlevé en éditant le modèle de style.

y a-t-il une meilleure solution?

47
demandé sur Danny Beckett 2009-06-04 18:00:08

6 réponses

vous pouvez en trouver un dans le WPF Toolkit , qui est également disponible via NuGet.

cet article montre comment créer une boîte de texte qui peut suggérer automatiquement des éléments à l'exécution sur la base de l'entrée, dans ce cas, les dossiers disque. WPF saisie semi-automatique de Dossier de zone de texte

jetez également un oeil à ce beau réutilisable WPF Autocomplete TextBox , il était pour moi très utilisable.

32
répondu Alexander Zwitbaum 2013-12-17 18:34:17

de Nimgoble est la version que j'ai utilisée en 2015. J'ai pensé que je l'avais mis ici car cette question était en haut de la liste dans google pour "WPF autocomplete textbox"

  1. "installez le paquet nuget pour le projet dans Visual Studio

  2. ajouter une référence à la bibliothèque dans le xaml:

    xmlns:behaviors="clr-namespace:WPFTextBoxAutoComplete;assembly=WPFTextBoxAutoComplete"

  3. créer une boîte de texte et lient L'AutoCompleteBehaviour à List<String> (TestItems):

    <TextBox Text="{Binding TestText, UpdateSourceTrigger=PropertyChanged}" behaviors:AutoCompleteBehavior.AutoCompleteItemsSource="{Binding TestItems}" />

IMHO c'est beaucoup plus facile à démarrer et à gérer que les autres options énumérées ci-dessus.

10
répondu JumpingJezza 2016-02-24 23:14:26

j'ai publié une boîte de texte automatique WPF complète dans WPF à CodePlex.com. Vous pouvez le télécharger et l'essayer à partir de https://wpfautocomplete.codeplex.com / .

8
répondu Deepak Bhardwaj 2014-07-29 11:33:25

ou vous pouvez ajouter L'AutoCompleteBox dans la boîte à outils en cliquant sur elle et ensuite choisir des articles, allez à composants WPF, tapez dans le filtre AutoCompleteBox, qui est sur le système.Windows.Contrôle l'espace de noms et le juste faire glisser dans votre fichier xaml. C'est beaucoup plus facile que de faire ces autres choses, puisque L'AutoCompleteBox est un contrôle natif.

4
répondu MelloG 2012-11-30 19:22:38

et voici la fourchette de la boîte à outils qui contient le port à 4.O,

https://github.com/jogibear9988/wpftoolkit

ça a très bien marché pour moi .

3
répondu user2475096 2014-02-19 16:49:31

je sais que c'est une très vieille question, mais je veux ajouter une réponse je suis venu avec.

tout D'abord, vous avez besoin d'un handler pour votre normal TextChanged event handler pour le TextBox :

private bool InProg;
internal void TBTextChanged(object sender, TextChangedEventArgs e)
            {
            var change = e.Changes.FirstOrDefault();
            if ( !InProg )
                {
                InProg = true;
                var culture = new CultureInfo(CultureInfo.CurrentCulture.Name);
                var source = ( (TextBox)sender );
                    if ( ( ( change.AddedLength - change.RemovedLength ) > 0 || source.Text.Length > 0 ) && !DelKeyPressed )
                        {
                         if ( Files.Where(x => x.IndexOf(source.Text, StringComparison.CurrentCultureIgnoreCase) == 0 ).Count() > 0 )
                            {
                            var _appendtxt = Files.FirstOrDefault(ap => ( culture.CompareInfo.IndexOf(ap, source.Text, CompareOptions.IgnoreCase) == 0 ));
                            _appendtxt = _appendtxt.Remove(0, change.Offset + 1);
                            source.Text += _appendtxt;
                            source.SelectionStart = change.Offset + 1;
                            source.SelectionLength = source.Text.Length;
                            }
                        }
                InProg = false;
                }
            }

, Puis faire un simple PreviewKeyDown gestionnaire:

    private static bool DelKeyPressed;
    internal static void DelPressed(object sender, KeyEventArgs e)
    { if ( e.Key == Key.Back ) { DelKeyPressed = true; } else { DelKeyPressed = false; } }

dans cet exemple," Files " est une liste de noms de répertoires créés au démarrage de l'application.

alors attachez simplement les manipulateurs:

public class YourClass
  {
  public YourClass()
    {
    YourTextbox.PreviewKeyDown += DelPressed;
    YourTextbox.TextChanged += TBTextChanged;
    }
  }

avec ceci tout ce que vous choisissez de mettre dans le List sera utilisé pour la boîte autocomplete. Ce n'est peut-être pas une bonne option si vous prévoyez d'avoir une liste énorme pour l'autocomplete, mais dans mon application, il ne voit que 20-50 articles donc il tourne à travers très rapide.

3
répondu ARidder101 2017-01-18 23:00:38