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

例としてこのように、プロパティにデータバインドしている場合

<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 メソッドでは、null であるため値を設定できず、プロパティは元の値を保持します。

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

Priview キーダウン イベントでユーザーを制限できます。うまくいくことを願っています...

于 2010-05-23T13:26:43.883 に答える