WPF AutoCompleteBox - Como restringi -lo a escolher apenas na lista de sugestões?
-
27-09-2019 - |
Pergunta
Gostaria de restringir o WPF AutoCompleteBox (WPF Toolkit Control) para selecionar um item apenas na lista de sugestões. Não deve permitir que os usuários digam o que quiserem.
Alguém pode me sugerir como implementar isso? Qualquer código de amostra é apreciado.
Solução
Eis como eu fiz isso. Crie uma classe derivada e substitua onpreviewTextInput. Defina sua coleção para a propriedade Itens Source do controle e ela deve funcionar bem.
public class CurrencySelectorTextBox : AutoCompleteBox
{
protected override void OnPreviewTextInput(TextCompositionEventArgs e)
{
var currencies = this.ItemsSource as IEnumerable<string>;
if (currencies == null)
{
return;
}
if (!currencies.Any(x => x.StartsWith(this.Text + e.Text, true, CultureInfo.CurrentCulture))
{
e.Handled = true;
}
else
{
base.OnPreviewTextInput(e);
}
}
}
Outras dicas
Você pode restringir o usuário do PRESTIEW KEY Down. Espero que funcione...
Se você estiver no banco de dados em uma propriedade, como este para um exemplo
<sdk:AutoCompleteBox ItemsSource="{Binding Sites, Source={StaticResource VmSchedulel}}" ValueMemberPath="SiteName"
SelectedItem="{Binding Site, Mode=TwoWay}" FilterMode="ContainsOrdinal">
<sdk:AutoCompleteBox.ItemTemplate>
<DataTemplate>
<TextBlock Text="{Binding SiteName}"/>
</DataTemplate>
</sdk:AutoCompleteBox.ItemTemplate>
</sdk:AutoCompleteBox>
Se algum texto for inserido, o que não corresponde a nada no itens Source, o SelectedItem será igual a NULL. No método definido da sua propriedade, você não pode definir o valor porque é nulo e a propriedade manterá seu valor original.
set
{
if (value != null)
{
BaseRecord.SiteID = value.ID;
PropChanged("Site");
}
}