2

我最近将搜索合同添加到我的应用程序中。它工作得很好!但是,每当我在应用程序未运行时搜索它时,它只会以空白屏幕开始。即使在 OnSearchActivated 方法中,我也做了添加搜索结果的部分。但即使我删除了我添加的代码,空白屏幕仍然存在。我创建了一个空白项目并将搜索合同添加到其中。即使应用程序未运行,它也可以在其中工作。问题似乎仅与我的应用程序有关。我无法调试它,因为它是在应用程序甚至没有运行时运行的东西。告诉我一个解决方案。

OnSearchActivated 和 OnLaunched 中的代码

Protected Overrides Async Sub OnSearchActivated(args As Windows.ApplicationModel.Activation.SearchActivatedEventArgs)
    Dim previousContent As UIElement = Window.Current.Content
    Dim frame As Frame = TryCast(previousContent, Frame)
    If frame Is Nothing Then
        frame = New Frame
        Common.SuspensionManager.RegisterFrame(frame, "AppFrame")
        If args.PreviousExecutionState = ApplicationExecutionState.Terminated Then
            Try
                Await Common.SuspensionManager.RestoreAsync()
            Catch ex As Common.SuspensionManagerException
            End Try
        End If
    End If
    frame.Navigate(GetType(SearchResultsPage1), args.QueryText)
    Window.Current.Content = frame
    Window.Current.Activate()
End Sub


Protected Overrides Async Sub OnLaunched(args As Windows.ApplicationModel.Activation.LaunchActivatedEventArgs)
    AddHandler SearchPane.GetForCurrentView.SuggestionsRequested, AddressOf OnSearchPaneSuggestionsRequested
'Contains definition of arrays ExNam, ExAbbr, ExInst, etc. removed from here to shorten the code and focus on its logic
    If rootFrame Is Nothing Then
        rootFrame = New Frame()
        Train_Thy_Brain.Common.SuspensionManager.RegisterFrame(rootFrame, "appFrame")
        If args.PreviousExecutionState = ApplicationExecutionState.Terminated Then
            Await Train_Thy_Brain.Common.SuspensionManager.RestoreAsync()
        End If
        Window.Current.Content = rootFrame
    End If
    If rootFrame.Content Is Nothing Then
        If Not rootFrame.Navigate(GetType(Instructions), args.Arguments) Then
            Throw New Exception("Failed to create initial page")
        End If
    End If
    Window.Current.Activate()
End Sub

'此外,命名空间定义是在顶部完成的,因此它们也不是问题。

4

2 回答 2

3

有一个调试您的应用程序的解决方案:在 VS2012 中,在解决方案资源管理器中右键单击您的项目,然后转到“调试”选项卡并在“开始操作”部分中,选中“不启动,但在启动时调试我的代码” .

现在您可以从 Search Contract 启动您的应用程序,即使它尚未运行并对其进行调试!

现在对于您的问题,我建议您在实际搜索某些内容之前检查数据是否已加载。

于 2013-04-14T12:49:47.000 回答
0

您可能会使用空查询字符串来激活搜索。检查您的搜索激活处理程序,您是否正在处理空白查询文本大小写?

protected override void OnSearchActivated(SearchActivatedEventArgs args)
{
    // your app initialization code here.

    Frame frame = (Frame)Window.Current.Content;
    if (!string.IsNullOrEmpty(args.QueryText))
    {
        frame.Navigate(typeof(SearchResultsPage), args.QueryText);
    }
    else
    {
        // navigate to your app home page if the query text is empty. 
        frame.Navigate(typeof(Home), null);
    }

    Window.Current.Activate();
}
于 2013-04-14T14:33:51.510 回答