如何在 Windows Phone 8.1 中保持 AutoSuggestBox 建议框打开

How to keep AutoSuggestBox suggestion box open in Windows Phone 8.1

使用 Windows Phone 8.1 (WinRT XAML) 中的新 AutoSuggestBox 控件,我试图让建议框始终保持打开状态——即使在用户单击之后一个建议。

我可以通过编程设置 AutoSuggestBox.IsSuggestionListOpen = true;

打开建议框

然后我像这样挂钩 SuggestionChosen 事件:

private void AutoSuggestBox_SuggestionChosen(AutoSuggestBox sender, AutoSuggestBoxSuggestionChosenEventArgs args) {
    sender.Text = args.SelectedItem.ToString();
    sender.IsSuggestionListOpen = true;
}

但不幸的是,即使我将 IsSuggestionListOpen 设置为 true,建议框在选择项目后仍然关闭。

如果您能在选择后帮助它保持打开状态,我们将不胜感激。

我找到的解决方案是挂钩 LayoutUpdated 事件。

我在 PickerFlyout 中有 AutoSuggestBox,所以我只想在 PickerFlyout 打开时打开建议框(很明显)。所以我在打开PickerFlyout的按钮上设置了一个Tag 属性来识别PickerFlyout是打开还是关闭。然后在 AutoSuggestBox 的 LayoutUpdated 事件中,如果 PickerFlyout 打开,我将 IsSuggestionListOpen 属性 设置为 true(如果未打开,则设置 false)。

代码:

private void PickerFlyout_Opened(object sender, object e) {
    ActivatePickerFlyoutButton.Tag = "open";
}

private void PickerFlyout_Closed(object sender, object e) {
    ActivatePickerFlyoutButton.Tag = "closed";
}

private void AutoSuggestBox_LayoutUpdated(object sender, object e) {
    AutoSuggestBox.IsSuggestionListOpen = ((ActivatePickerFlyoutButton.Tag as string).Equals("open"));
}

这是我唯一需要设置 IsSuggestionListOpen 属性 的地方,因为 LayoutUpdated 事件会在所有正确的时间触发。