This other SO question pregunta sobre un cuadro de texto de autocompletar en WPF. Varias personas han creado estos, y una de las respuestas dadas sugiere this codeproject article.WPF: cuadro de texto Autocompletar, ... otra vez
Pero no he encontrado ningún cuadro de texto de autocompletar de WPF que se compare con el cuadro de texto de autocompletar WinForms. La muestra CodeProject funciona, más o menos, ...
alt text http://i50.tinypic.com/sx2ej5.jpg
... pero
- no está estructurado como un control reutilizable o DLL. Es un código que necesito incrustar en cada aplicación.
- Funciona solo con directorios. no tiene propiedades para establecer si el origen de autocompletar es sólo directorios de sistema de archivos, o archivos de sistema de archivos, o ... etc. Podría escribir código para hacer esto, por supuesto, pero ... Prefiero usar el código de otra persona ya escrito.
- no tiene propiedades para establecer el tamaño emergente, etc.
- hay un cuadro de lista emergente que presenta las posibles terminaciones. Al navegar por esa lista, el cuadro de texto no cambia. Escribir un carácter mientras se enfoca en el cuadro de lista no hace que el cuadro de texto se actualice.
- navegando fuera del cuadro de lista no hace desaparecer el cuadro de lista emergente. Esto es confuso.
Por lo tanto, mi pregunta:
* ¿Alguien tiene un cuadro de texto GRATIS WPF Autocompletar que funciona, y proporciona una experiencia de interfaz de usuario de calidad *
RESPUESTA
?Así es como lo hice:
.0. consiga el WPF Toolkit
.1. ejecute el MSI para el WPF Toolkit
.2. Dentro de Visual Studio, arrastre/suelte desde la caja de herramientas, específicamente el grupo de Visualización de datos, en el Diseñador de UI. Parece que este en la caja de herramientas VS:
alt text http://i49.tinypic.com/s12q6x.jpg
Si no desea utilizar el diseñador, artesanal, el XAML. Se ve así:
<toolkit:AutoCompleteBox
ToolTip="Enter the path of an assembly."
x:Name="tbAssembly" Height="27" Width="102"
Populating="tbAssembly_Populating" />
... donde el espacio de nombres 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 el evento Populating
.Esto es lo que he usado:
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();
}
}
Funciona, tal y como era de esperar. Se siente profesional. No hay ninguna de las anomalías que exhibe el control del proyecto de código. Esto es lo que parece:
alt text http://i50.tinypic.com/24qsopy.jpg
Thanks to Matt for the pointer al paquete de herramientas de WPF.
intrigantes sonidos, Matt. ¿Hay alguna guía o ejemplo sobre el uso de AutoCompleteBox? Encontré la DLL que lo contiene. ¿Qué xmlns uso en XAML? ¿Cómo lo uso realmente? – Cheeso
Tenga en cuenta que el enlace de la entrada del blog Acabo de agregar conversaciones sobre Silverlight, pero AutoCompleteBox también es para WPF. –
WPF Toolkit en CodePlex está muerto, pero hay varias bifurcaciones en GitHub, si alguien necesita eso: [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