как закрыть раскрывающийся список автозаполнения в Windows Phone 7 - PullRequest
1 голос
/ 29 июля 2011

Есть ли способ программно закрыть выпадающий список автозаполнения? Мой вариант использования выглядит следующим образом.

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, я проверяю, был ли правильный фильтр уже присоединен к свойству TextFilter, если нет, тогда я делаю переключение.

надеюсь, это поможет некоторым из вас.

Ответы [ 2 ]

2 голосов
/ 30 июля 2011

Есть ли какой-либо другой фокусируемый элемент управления на странице? Просто установите фокус в другом месте, и ваша проблема должна быть решена.

0 голосов
/ 14 февраля 2013

Когда вы измените текст AutoCompleteBox, откроется раскрывающийся список. Только когда пользователь изменил текст и найдется совпадение, раскрывающийся список закроется.

Просто измените userInitiated на true, и при совпадении раскрывающийся список закроется.

private void UpdateTextCompletion(bool userInitiated)
    {
        userInitiated = true; ...
...