Czy możliwe jest automatyczne uzupełnianie pól tekstowych w WPF?AutoComplete TextBox w WPF
Znalazłem próbkę, w której używane jest pole kombi, a trójkąt jest usuwany przez edycję szablonu stylu.
Czy istnieje lepsze rozwiązanie?
Czy możliwe jest automatyczne uzupełnianie pól tekstowych w WPF?AutoComplete TextBox w WPF
Znalazłem próbkę, w której używane jest pole kombi, a trójkąt jest usuwany przez edycję szablonu stylu.
Czy istnieje lepsze rozwiązanie?
Można go znaleźć w WPF Toolkit, który jest również dostępny za pośrednictwem NuGet.
W tym artykule opisano sposób tworzenia pola tekstowego, które może automatycznie sugerować elementy w czasie wykonywania na podstawie danych wejściowych, w tym przypadku folderów na dysku. WPF AutoComplete Folder TextBox
Spójrz na to ładne Reusable WPF Autocomplete TextBox, to było dla mnie bardzo użyteczne.
lub możesz dodać AutoCompleteBox do przybornika, klikając go, a następnie wybierz elementy, przejdź do komponentów WPF, wpisz filtr AutoCompleteBox, który znajduje się w obszarze nazw System.Windows.Controls i po prostu przeciągnij do swojego xaml plik. Jest to o wiele łatwiejsze niż robienie tych innych rzeczy, ponieważ AutoCompleteBox to natywna kontrola.
i tutaj rozwidleniu wich toolkit zawiera port do 4.O,
https://github.com/jogibear9988/wpftoolkit
to działało bardzo dobrze dla mnie.
Opublikowałem pole wypełnione automatycznie WPF w WPF na stronie CodePlex.com. Możesz pobrać i wypróbować go od https://wpfautocomplete.codeplex.com/.
Nimgoble's jest wersja Kiedyś w 2015 roku myślałem, że go umieścić tu kwestia ta była na szczycie listy w Google dla „wpf autouzupełniania tekstowym”
Install Nuget pakiet dla projektu w Visual Studio
Dodaj odwołanie do biblioteki w XAML:
xmlns:behaviors="clr-namespace:WPFTextBoxAutoComplete;assembly=WPFTextBoxAutoComplete"
utworzyć pole tekstowe i wiążą AutoComplet eBehaviour do List<String>
(TestItems):
<TextBox Text="{Binding TestText, UpdateSourceTrigger=PropertyChanged}"
behaviors:AutoCompleteBehavior.AutoCompleteItemsSource="{Binding TestItems}" />
IMHO jest to o wiele łatwiejsze, aby zacząć i zarządzać niż innych opcji wymienionych powyżej.
Działa dobrze dla wbudowanego autouzupełniania, ale nie zawiera rozwijanej listy z opcjami. – lambinator
@lambinator - tak nie ma rozwijanego menu. Z POV projektu, jeśli mam tylko kilka pozycji (powiedzmy <20-50?) Następnie używam zwykłego combobox, ponieważ i tak możesz napisać dalej: http://stackoverflow.com/a/8333801/345659. Jeśli mam zbyt wiele elementów do wyświetlenia (kto chce przewijać przez wieki?), Używam tego pola tekstowego autouzupełniania. – JumpingJezza
Wiem, że to bardzo stare pytanie, ale chcę dodać odpowiedź, którą wymyśliłem.
Najpierw trzeba obsługi dla normalnej obsługi TextChanged
wydarzeniem dla 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;
}
}
Następnie zrobić prosty PreviewKeyDown
Handler:
private static bool DelKeyPressed;
internal static void DelPressed(object sender, KeyEventArgs e)
{ if (e.Key == Key.Back) { DelKeyPressed = true; } else { DelKeyPressed = false; } }
W tym przykładzie "Files" to lista nazwy katalogów utworzone podczas uruchamiania aplikacji.
Następnie wystarczy przymocować teleskopowe:
public class YourClass
{
public YourClass()
{
YourTextbox.PreviewKeyDown += DelPressed;
YourTextbox.TextChanged += TBTextChanged;
}
}
Z tego, co wybrać, aby umieścić w List
będą wykorzystywane na polu autouzupełniania. To może nie być świetna opcja, jeśli spodziewasz się mieć ogromną listę autouzupełniania, ale w mojej aplikacji widzi tylko 20-50 pozycji, więc przechodzi bardzo szybko.
'System.Windows.Controls.AutoCompleteBox' nie jest częścią WPF. Będziesz musiał dodać odniesienie do [zestawu narzędzi WPF] (http://wpf.codeplex.com/), aby użyć tej kontroli. –
@MartinLiversage Dodałem zestaw narzędzi do wpf do wizualnego studia 2013. Ale wciąż pole auto-uzupełnienia nie jest widoczne w skrzynce narzędziowej. dlaczego? – vigamage