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,但我没有看到要设置的属性/字段以使其失去焦点。

任何帮助表示赞赏。

好吧,我稍微修改了一下,想出了一个kludge。在 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 属性,如果没有,则进行切换。

希望这对你们中的一些人有所帮助。

4

2 回答 2

2

页面上还有其他可聚焦的控件吗?只需将焦点放在其他地方,您的问题就应该得到解决。

于 2011-07-30T17:32:47.747 回答
0

当您更改了 AutoCompleteBox 的文本后,下拉菜单将打开。只有当用户更改了文本并且有匹配项时,下拉菜单才会关闭。

只需将 userInitiated 更改为 true ,当匹配时下拉菜单将关闭。

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