我想限制WPF AutoCompleteBox(WPF工具包对照)只从建议列表中选择一个项目。它不应该允许用户键入任何他们想要的东西。

可以有人建议我如何实现这一点?任何示例代码理解。

有帮助吗?

解决方案

下面是我做到了。创建一个派生类并覆盖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);
        }            
    }
}

其他提示

可以通过限制预览键按下事件的用户。我希望它会工作...

如果你正在它数据绑定到一个属性,像这样的实例

<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>

如果输入一些文字不匹配在任何的ItemsSource的的SelectedItem将等于空。 在你的财产的一套方法,你可以不设置值,因为它的空,该物业将保持它原有的价值。

 set
        {
            if (value != null)
            {
                BaseRecord.SiteID = value.ID;
                PropChanged("Site");
            }
        }
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top