ContentFrame.Navigate适用于导航项,但不适用于AutoSuggestBox

时间:2017-11-07 06:24:11

标签: c# windows uwp uwp-xaml

我有一个带有NavigationView的UWP应用程序。我一直在参考这个文档,除了更深入地使用AutoSuggestBox之外,它还包含所有内容的工作示例。 https://docs.microsoft.com/en-us/windows/uwp/controls-and-patterns/navigationview

我想要尝试的是在QuerySubmitted上更新MainPage NavigationView的ContentFrame,我尝试使用ContentFrame.Navigate执行此操作,但是,这最终会导致ContentFrame完全空白。我很困惑,因为没有太多关于AutoSuggestBox的相关内容。

我目前的代码如下:

private async void AutoSuggestBox_QuerySubmittedAsync(AutoSuggestBox sender, AutoSuggestBoxQuerySubmittedEventArgs args)
{
    searchResultsClass.searchQuery = suggestBox.Text;
    Debug.WriteLine(searchResultsClass.searchQuery);
    await searchResultsClass.SearchAsync();
    this.ContentFrame.Navigate(typeof(SearchResults));
}

SearchResults.xaml,与我的其他工作视图相同:

<Page
    x:Class="TestApp.Views.SearchResults"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:local="using:TestApp.Views"
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
    mc:Ignorable="d">

    <Grid Background="{ThemeResource ApplicationPageBackgroundThemeBrush}">
        <GridViewHeaderItem Content="Search results for ''" FontSize="36"/>
    </Grid>
</Page>

1 个答案:

答案 0 :(得分:0)

无法重现您的问题。 ContentFrame.Navigate可以很好地处理QuerySubmitted事件句柄。 XAML中的AutoSuggestBox如下:

<NavigationView.AutoSuggestBox>
    <AutoSuggestBox x:Name="ASB" QueryIcon="Find" QuerySubmitted="ASB_QuerySubmitted"/>
</NavigationView.AutoSuggestBox>

结果:

enter image description here

因此,请在this.ContentFrame.Navigate(typeof(SearchResults));代码行添加一个断点,并调试项目以检查它是否可以成功完成此步骤。 如果您仍有问题,请上传最小的转载项目。

<强>更新

为了测试你的项目,问题是SearchResults页面缺少构造函数方法。例如:

public SearchResults()
{
    this.InitializeComponent();
}
public async Task SearchAsync()
{
   ...
}

默认情况下,每个导航都会创建所请求的特定页面(或子类)的新实例,并处理上一页面实例。详情请参阅Page课程。因此,在代码段中的SearchResults中创建实例MainPage可能毫无意义,并且不会对显示的导航SearchResults页面产生影响。

如果您想将AutoSuggestBox的文字传递到另一个页面,则应通过导航方法 Pass information between pages