【问题标题】:ContentFrame.Navigate works for navigation items but not AutoSuggestBoxContentFrame.Navigate 适用于导航项,但不适用于 AutoSuggestBox
【发布时间】:2017-11-09 10:55:45
【问题描述】:

我有一个带有 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>

【问题讨论】:

    标签: c# windows uwp uwp-xaml


    【解决方案1】:

    无法在我这边重现您的问题。 ContentFrame.Navigate 可以很好地与 QuerySubmitted 事件句柄配合使用。 AutoSuggestBox 在 XAML 中如下所示:

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

    结果:

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

    更新

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

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

    默认情况下,每个导航都会创建请求的特定页面(或子类)的新实例,并释放前一个页面实例。详情请参考Page类。因此,在您的代码 sn-p 中的 MainPage 中创建实例 SearchResults 可能没有意义,并且不会对显示的导航 SearchResults 页面产生影响。

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

    【讨论】:

    • 好的,谢谢,我添加了一个断点,似乎可以通过,但仍然没有做任何事情。我创建了一个新项目来重现该问题并对其进行精简以尝试摆脱任何可能导致它发生的事情,但仍然是同样的问题。这是一个链接到所说的最小项目,我可能错过了一些非常明显的东西,
    • 抱歉,互联网需要很长时间才能将项目上传到 Google 云端硬盘。 Here's the link.在我被编辑时间打断之前继续最后一句话,我可能遗漏了一些非常明显的东西,如果有的话,请道歉。
    • @Mtngoats 经测试得出原因,请查看更新后的答案。
    猜你喜欢
    • 2021-02-05
    • 1970-01-01
    • 2018-01-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多