1

オートコンプリートボックスのドロップダウンリストをプログラムで閉じる方法はありますか?私のユースケースは次のとおりです。

MainPage.xamlは、値をSearchPage.xamlに渡します(つまり、/ SearchPage.xaml?query = someText)。

SearchPage.xaml.csで、私は設定しました、

autoCompleteBox.Text = NavigationContext.QueryString["query"]. 

この時点で、提案された一致のドロップダウンリストが表示されます。ページが移動したばかりのときにこの動作をしたくありません。

ドロップダウンリストを閉じるために次のことも試しましたが、役に立ちませんでした。

autoCompleteBox.Text = NavigationContext.QueryString["query"];
autoCompleteBox.IsDropDownOpen = false;

ドロップダウンリストは、フォーカスを失うとAutoCompleteBoxから離れるように見えますが、フォーカスを失うように設定するプロパティ/フィールドが表示されません。

どんな助けでも大歓迎です。

さて、私は少しいじくり回して、応急修理を思いついた。SearchPage.xaml.csのコンストラクターには、次のコードがあります。

autoCompleteBox.TextFilter += DummyFilter;
autoCompleteBox.GotFocus += (s,args) => {
 if(!isAutoCompleteBoxInit) {
  autoCompleteBox.TextFilter -= DummyFilter;
  autoCompleteBox.TextFilter += RealFilter;
 }
}

DummyFilterは次のようになります。

bool DummyFilter(string search, string value) { return false; }

RealFilterは次のようになります。

bool RealFilter(string search, string value) {
 if(null != value) return value.ToLower().StartsWith(search.ToLower());
}

私のOnNavigatedToメソッドでは、autoCompleteBox.Text =NavigationContext.QueryString["query"]を設定します。したがって、これを今行うと、DummyFilterは常にfalseを返すので、ドロップダウンリストは消えます。ユーザーがAutoCompleteBoxに焦点を合わせたときに、正しいFilterがTextFilterプロパティに既にアタッチされているかどうかを確認し、そうでない場合は、切り替えを行います。

これがあなたの何人かを助けることを願っています。

4

2 に答える 2

0

AutoCompleteBox のテキストを変更すると、ドロップダウンが開きます。ユーザーがテキストを変更し、一致する場合にのみ、ドロップダウンが閉じます。

userInitiated を true に変更するだけで、一致するとドロップダウンが閉じます。

private void UpdateTextCompletion(bool userInitiated)
    {
        userInitiated = true; ...
于 2013-02-14T17:17:28.573 に答える