从搜索窗格中删除查询提交的处理程序

时间:2012-09-27 13:56:50

标签: search microsoft-metro winrt-xaml

按照许多在线示例,我通过将处理程序附加到应用程序的搜索窗格,在Metro应用程序中实现了搜索:

public void DoSearch() {
    var mySearchPane = SearchPane.GetForCurrentView();
    if (null == mySearchPane) return;
    mySearchPane.QuerySubmitted +=
        new TypedEventHandler<SearchPane, SearchPaneQuerySubmittedEventArgs>(OnQuerySubmitted);
    mySearchPane.Show();
}

private void OnQuerySubmitted(...) {
    // ...blah, blah
}

问题:搜索结束后,最终是否需要删除QuerySubmitted事件的处理程序?如果必须删除它,那么如何在搜索完成后删除事件处理程序?

1 个答案:

答案 0 :(得分:0)

看起来您正在连接特定的用户操作(如按钮单击)以启动搜索,包括连接到搜索事件。这不是正确的方法。

您希望在创建页面时调用SearchPane.GetForCurrentView并挂钩QuerySubmitted事件。用户可以随时调用Charm栏并执行搜索。如果我的假设是正确的,那么您的应用将无法处理该情况。

我想从UX打开搜索窗格(通常不是一个很好的用户体验练习),然后你想将mySearchPane设置为一个类变量,可以随时访问页面的其余部分并调用来自点击处理程序内部的mySearchPane.Show()就像现在一样。

如果您以这种方式处理事情,则无需担心断开QuerySubmitted处理程序,因为当您离开页面时将清理处理程序。