Windows Runtime WinRTXamlToolkit AlternativeFrame Navigate M

本文关键字:Navigate AlternativeFrame WinRTXamlToolkit Runtime Windows | 更新日期: 2023-09-27 17:56:48

我目前正在使用WinRTXamlToolkit的AlternativeFrame控件在弹出窗口中显示多个页面,以设置将某些内容发布到reddit的功能。我目前的问题是替代框架的导航方法似乎不起作用。

摘自RedditUploadDialog.xaml

<ScrollViewer HorizontalAlignment="Left" Margin="10,130,0,0" VerticalAlignment="Top" Width="480" Height="310" VerticalScrollBarVisibility="Hidden">
            <Controls:AlternativeFrame x:Name="scrollingFrame" extensions:FrameworkElementExtensions.ClipToBounds="True">
                <Controls:AlternativeFrame.PageTransition>
                    <Controls:PushTransition ForwardDirection="Random" BackwardDirection="Random" />
                </Controls:AlternativeFrame.PageTransition>
            </Controls:AlternativeFrame>
        </ScrollViewer>

摘自RedditUploadDialog.xaml.cs

/*"scrollingFrame" is an AlternativeFrame control inside of a scrollviewer. RUDSubPage2 is an */AlternativePage control. RUDSubPage2's code page does not have any code in it except for the InitializeComponents method in the 
await this.scrollingFrame.Navigate(typeof(RUDSubPage2));

对导航(不在上面)的第一次调用确实有效,它会加载 RUDSubPage1 控件。问题是,如上所示,对 Navigate 的第二次调用在我进行调用时挂起。它永远不会回来,所以等待永远停留在它上面。RUDSubPage2 在其 xaml 和文件背后的代码中几乎是空的,因此其中没有任何内容会干扰 Navigate 方法。任何想法为什么这不起作用?

编辑:好的,我在WinRTXamlToolkit代码中找到了麻烦的行。

    /// <summary>
    /// Contains extension methods to wait for FrameworkElement events.
    /// </summary>
    public static class FrameworkElementExtensions
    {
        /// <summary>
        /// Waits for the element to load (construct and add to the main object tree).
        /// </summary>
        public static async Task WaitForLoadedAsync(this FrameworkElement frameworkElement)
        {
            if (frameworkElement.IsInVisualTree())
                return;
            //This line, right here, is the one that keeps hanging. This method is called from within the Navigate method of the AlternativeFrame control. Also, frameworkElement here is the AlternativeFrame while the code is running.
            await EventAsync.FromRoutedEvent(
                eh => frameworkElement.Loaded += eh,
                eh => frameworkElement.Loaded -= eh);
        }
    }

出于某种原因,在我尝试再次调用 Navigate 方法后,上面的行将始终挂起在我的应用程序中。有人知道它为什么要这样做吗?

Windows Runtime WinRTXamlToolkit AlternativeFrame Navigate M

我决定只注释掉我在原始帖子中发现的麻烦行,现在一切正常。这不是一个好的解决方案,因为我讨厌做这样的事情来使事情工作,但我无法弄清楚为什么那行代码会让我的程序挂起。感谢您的帮助。