WPF: zone de texte de saisie semi-automatique, ...encore une fois

Cette autre DONC, la question pose des questions sur une zone de texte de saisie semi-automatique dans WPF. Plusieurs personnes ont construit ces, et l'une des réponses données suggèrent cette codeproject article.

Mais je n'en ai pas trouvé WPF zone de texte de saisie semi-automatique, ce qui se compare avec les WinForms zone de texte de saisie semi-automatique. Le codeproject exemple fonctionne, en quelque sorte, ...

WPF: zone de texte de saisie semi-automatique, ...encore une fois

...mais

  • il n'est pas structuré comme un re-utilisable de contrôle ou de la DLL. C'est du code que j'ai besoin d'incorporer dans chaque application.
  • Il fonctionne uniquement avec les répertoires. il ne possède pas de propriétés pour définir si la saisie semi-automatique de la source à un système de fichiers répertoires, ou système de fichiers fichiers, ou......etc. Je pourrais écrire le code pour faire cela, bien sûr, mais...je préfère utiliser un autre code déjà écrit.
  • il ne possède pas de propriétés pour définir la taille de fenêtre contextuelle, etc.
  • il y a une fenêtre de zone de liste qui présente les complétions possibles. Lors de la navigation par le biais de cette liste, la zone de texte ne change pas. En tapant un caractère tout concentré dans la zone de liste ne cause pas de la zone de texte pour le mettre à jour.
  • la navigation se concentrer loin de la zone de liste ne pas faire la popup listbox disparaître. Ceci est source de confusion.

Donc, ma question:

*Quelqu'un aurait-il une GRATUIT WPF zone de texte de saisie semi-automatique qui fonctionne, et fournit une INTERFACE utilisateur de qualité de l'expérience?*


RÉPONSE

Voici comment je l'ai fait:

.0. obtenir le WPF Toolkit

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

.2. Dans Visual Studio, faites-le Glisser/déposer à partir de la boîte à outils - plus précisément, la Visualisation des Données de groupe dans le Concepteur d'INTERFACE utilisateur. Il ressemble à ceci dans le VS boîte à outils:

WPF: zone de texte de saisie semi-automatique, ...encore une fois

Si vous ne souhaitez pas utiliser le concepteur de la main, de l'artisanat le code xaml. Il ressemble à ceci:


<toolkit:AutoCompleteBox
   ToolTip="Enter the path of an assembly."
   x:Name="tbAssembly" Height="27" Width="102"
   Populating="tbAssembly_Populating" />

...où la boîte à outils de l'espace de noms est mappé de cette façon:

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

.3. Fournir le code pour le Populating événement. 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<string>();

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

Il fonctionne, juste la façon dont vous vous attendez. Il se sent professionnel. Il y a aucun des anomalies que les codeproject de contrôle des expositions. C'est à quoi il ressemble:

WPF: zone de texte de saisie semi-automatique, ...encore une fois


Merci à Matt pour le pointeur à la WPF toolkit.

InformationsquelleAutor Cheeso | 2010-02-26