我想限制WPF AutoCompleteBox(wpf工具包控件)只从建议列表中选择一个项目。它不应该让用户输入任何他们想要的。WPF AutoCompleteBox - 如何限制它只从建议列表中选择?
有人可以建议我如何实现这个?任何示例代码表示赞赏。
我想限制WPF AutoCompleteBox(wpf工具包控件)只从建议列表中选择一个项目。它不应该让用户输入任何他们想要的。WPF AutoCompleteBox - 如何限制它只从建议列表中选择?
有人可以建议我如何实现这个?任何示例代码表示赞赏。
这是我做到了这一点。创建派生类并重写OnPreviewTextInput。将你的集合设置为控件的ItemsSource属性,它应该很好地工作。
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);
}
}
}
您可以通过Priview关键事件来限制用户。我希望它会工作...
如果如果输入一些文字不中的ItemsSource匹配任何你需要将其数据绑定属性,像这样的一个例子
<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>
的的SelectedItem将等于空。 在您的属性的设置方法中,您可以不设置该值,因为它为空,并且该属性将保持其原始值。
set
{
if (value != null)
{
BaseRecord.SiteID = value.ID;
PropChanged("Site");
}
}