2

根据许多在线示例,我通过将处理程序附加到应用程序的搜索窗格来在 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 事件的处理程序是否最终需要在搜索结束后删除?如果必须删除它,那么在搜索完成后如何删除事件处理程序?

4

1 回答 1

0

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

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

如果您想从 UX 打开搜索窗格(顺便说一句,这通常不是一个好的 UX 实践),那么您需要将 mySearchPane 设置为一个类变量,可以随时访问页面的其余部分并mySearchPane.Show()从您的内部调用像现在一样单击处理程序。

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

于 2012-09-27T14:27:52.513 回答