This other SO question chiede una casella di testo a completamento automatico in WPF. Diverse persone li hanno creati e una delle risposte fornite suggerisce this codeproject article.WPF: Casella di testo con completamento automatico, ... nuovamente
Ma non ho trovato alcuna casella di testo di completamento automatico WPF che si confronta con la casella di testo di completamento automatico di WinForms. Il campione CodeProject funziona, sorta di ...
alt text http://i50.tinypic.com/sx2ej5.jpg
... ma
- non è strutturata come un controllo riutilizzabile o DLL. È il codice che ho bisogno di incorporare in ogni app.
- Funziona solo con le directory. non ha proprietà per impostare se l'origine del completamento automatico è solo directory del filesystem, file filesystem, o .... ecc. Potrei scrivere codice per farlo, ovviamente, ma ... preferirei usare il codice di qualcun altro già scritto.
- non ha le proprietà per impostare le dimensioni dei popup, ecc.
- c'è una casella di riepilogo popup che presenta i completamenti possibili. Durante la navigazione in quell'elenco, la casella di testo non cambia. Digitando un personaggio mentre si è concentrati nella casella di riepilogo non si ottiene l'aggiornamento della casella di testo.
- lo spostamento dello stato attivo fuori dalla casella di riepilogo non fa scomparire la casella di riepilogo popup. Questo è confusionario.
Quindi, la mia domanda:
* Qualcuno ha una casella di testo libero WPF completamento automatico che funziona, e fornisce un'esperienza utente di qualità *
RISPOSTA
?Ecco come l'ho fatto:
.0. get the WPF Toolkit
.1. eseguire l'MSI per WPF Toolkit
.2. In Visual Studio, trascina/rilascia dalla casella degli strumenti, in particolare il gruppo Data Visualization, in UI Designer. Ecco come si presenta nella casella degli strumenti VS:
alt text http://i49.tinypic.com/s12q6x.jpg
Se non si desidera utilizzare il progettista, mano-craft XAML. Ecco come si presenta:
<toolkit:AutoCompleteBox
ToolTip="Enter the path of an assembly."
x:Name="tbAssembly" Height="27" Width="102"
Populating="tbAssembly_Populating" />
... dove lo spazio dei nomi toolkit è mappato in questo modo:
xmlns:toolkit="clr-namespace:System.Windows.Controls;assembly=System.Windows.Controls.Input.Toolkit"
.3. Fornire il codice per l'evento Populating
.Ecco quello che ho usato:
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();
}
}
Funziona, proprio come ci si aspetterebbe. Sembra professionale. Non ci sono anomalie che il controllo codeproject mostri. Questo è ciò che sembra:
alt text http://i50.tinypic.com/24qsopy.jpg
Thanks to Matt for the pointer al toolkit WPF.
Suona intrigante, Matt. C'è una guida o un esempio sull'uso di AutoCompleteBox? Ho trovato la DLL che lo contiene. Quali xmlns devo usare in XAML? Come lo uso? – Cheeso
Nota che il link al post del blog ho appena aggiunto discussioni su Silverlight, ma AutoCompleteBox è anche per WPF. –
WPF Toolkit su CodePlex è morto, ma ci sono diversi fork su GitHub, se qualcuno ne ha bisogno: [jogibear9988/wpftoolkit] (https://github.com/jogibear9988/wpftoolkit), [WPFToolkit.DataVisualization] (https://github.com/davidalpert/WPFToolkit.DataVisualization), [theonlylawislove/WPFToolkit] (https://github.com/theonlylawislove/WPFToolkit), [jrwren/wpftoolkit] (https://github.com/jrwren/wpftoolkit). – Athari