6

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

有人可以建议我如何实施吗?任何示例代码表示赞赏。

4

3 回答 3

3

这就是我的做法。创建派生类并覆盖 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);
        }            
    }
}
于 2010-08-20T14:05:07.737 回答
1

您可以通过 Priview 按键事件来限制用户。我希望它会工作...

于 2010-05-23T13:26:43.883 回答
1

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

<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 将等于 null。在您的属性的 set 方法中,您可以不设置该值,因为它为空,并且该属性将保留它的原始值。

 set
        {
            if (value != null)
            {
                BaseRecord.SiteID = value.ID;
                PropChanged("Site");
            }
        }
于 2010-10-12T22:16:37.297 回答