C# WPF自动完成框-如何限制它仅从建议列表中选择?

C# WPF自动完成框-如何限制它仅从建议列表中选择?,c#,xaml,wpftoolkit,autocompletebox,C#,Xaml,Wpftoolkit,Autocompletebox,我想限制WPF AutoCompleteBox(WPF toolkit控件)仅从建议列表中选择一项。它不应该允许用户键入他们想要的任何内容 有人能建议我如何实施这个吗?欢迎使用任何示例代码。您可以通过私钥关闭事件限制用户。我希望它能起作用……以下是我是如何做到的。创建派生类并重写OnPreviewTestInput。将集合设置为控件的ItemsSource属性,它应该可以正常工作 public class CurrencySelectorTextBox : AutoCompleteBox {

我想限制WPF AutoCompleteBox(WPF toolkit控件)仅从建议列表中选择一项。它不应该允许用户键入他们想要的任何内容


有人能建议我如何实施这个吗?欢迎使用任何示例代码。

您可以通过私钥关闭事件限制用户。我希望它能起作用……

以下是我是如何做到的。创建派生类并重写OnPreviewTestInput。将集合设置为控件的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);
        }            
    }
}
公共类CurrencySelectorTextBox:AutoCompleteBox
{    
PreviewTestInput上的受保护覆盖无效(TextCompositionEventArgs e)
{            
var Currences=此.ItemsSource为IEnumerable;
如果(货币==null)
{
返回;
}
如果(!currences.Any)(x=>x.StartsWith(this.Text+e.Text,true,CultureInfo.currentcurity))
{
e、 已处理=正确;
}
其他的
{
基于输出(e);
}            
}
}

如果要将其数据绑定到属性,例如

<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>
 set
        {
            if (value != null)
            {
                BaseRecord.SiteID = value.ID;
                PropChanged("Site");
            }
        }