Solución:
La última versión del kit de herramientas de WPF incluye un AutoCompleteBox. Es un conjunto gratuito de controles de Microsoft, algunos de los cuales se incluirán en .NET 4.
Jeff Wilcox – Presentamos AutoCompleteBox
Así es como lo hice:
.1. ejecutar MSI para el kit de herramientas de WPF
.2. Dentro de Visual Studio, arrastre / suelte desde la caja de herramientas, específicamente el grupo Visualización de datos, en el Diseñador de interfaz de usuario. Se ve así en la caja de herramientas de VS:
O crea a mano el xaml. Se parece a esto:
<toolkit:AutoCompleteBox
ToolTip="Enter the path of an assembly."
x:Name="tbAssembly" Height="27" Width="102"
Populating="tbAssembly_Populating" />
… donde el espacio de nombres del kit de herramientas se asigna de esta manera:
xmlns:toolkit="clr-namespace:System.Windows.Controls;assembly=System.Windows.Controls.Input.Toolkit"
.3. Proporcione el código para Populating
evento. Esto es lo que usé:
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();
}
}
Gracias a Matt por el puntero al kit de herramientas de WPF.
Utilizo Intellibox en mi proyecto interno. http://intellibox.codeplex.com/
Encuentro que su uso del patrón Proveedor para realizar búsquedas es muy intuitivo.
La respuesta de Rake proporciona un ejemplo de cómo usarlo y, como señala, ha experimentado cierto desarrollo a fines del año pasado (aunque esto es mucho después de que lo usé por última vez).