简体   繁体   English

wpf Frame.Navigate两次调用时无法推送堆栈

[英]wpf Frame.Navigate can't push stack when calls two times

    Page1 page1 = new Page1();
    Page2 page2 = new Page2();
    Page3 page3 = new Page3();
    private void btnNextClick(object sender, RoutedEventArgs e)
    {
        navi.Navigate(page1);
        navi.Navigate(page2);
    }

As shown in the code above, I want the Frame first to navigate to "page1",and then to navigate to "page2". 如上面的代码所示,我希望Frame首先导航到“ page1”,然后再导航到“ page2”。

As a result,it did navigate to "page2",but I have't see "page1" in Fram.BackStack . 结果,它确实导航到“ page2”,但在Fram.BackStackFram.BackStack看到“ page1”。 So I can't navigate back. 所以我无法返回。 And I found Frame.Navigating event trigged twice, and Frame.Navigated trigged once. 我发现Frame.Navigating事件触发了两次,而Frame.Navigated事件触发了一次。 It seems the first navigate was canceled, and I want know why? 似乎第一次导航已取消,我想知道为什么吗?

And, Is there another way to achieve this effect?(navigate to page1 and quickly navigate to page2--->then navigate back to page1) 而且,还有另一种方法可以达到这种效果吗?(导航到第1页,然后快速导航到第2页->然后再导航回第1页)

Additional information: 附加信息:

my full c# code: 我完整的C#代码:

 public partial class MainWindow : Window
{
    Page1 page1 = new Page1();
    Page2 page2 = new Page2();
    Page3 page3 = new Page3();
    public MainWindow()
    {
        InitializeComponent();
        navi.Navigated += Navi_Navigated;
        navi.Navigating += Navi_Navigating;
    }

    private void Navi_Navigating(object sender, NavigatingCancelEventArgs e)
    {
    }

    private void Navi_Navigated(object sender, NavigationEventArgs e)
    {

    }

    private void btnPreviousPageClick(object sender, RoutedEventArgs e)
    {
        if (navi.CanGoBack)
        {
            navi.GoBack();
        }
    }

    private void btnNextClick(object sender, RoutedEventArgs e)
    {
        navi.Navigate(page1);
        navi.Navigate(page2);
    }

    private void btnNextClick2(object sender, RoutedEventArgs e)
    {
        navi.Navigate(page2);
    }

    private void btnNextClick3(object sender, RoutedEventArgs e)
    {
        navi.Navigate(page3);
    }
}

and my xaml code: 和我的xaml代码:

<Window x:Class="mmNavigate.MainWindow"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
    xmlns:local="clr-namespace:mmNavigate"
    mc:Ignorable="d"
    Title="MainWindow" Height="350" Width="525">
<StackPanel>
    <Frame JournalOwnership="OwnsJournal" NavigationUIVisibility="Visible" x:Name="navi" Height="280"></Frame>
    <StackPanel Orientation="Horizontal">
        <Button Content="Previous" Click="btnPreviousPageClick"/>
        <Button Content="Page1" Margin="20,0,0,0" Click="btnNextClick"/>
        <Button Content="Page2" Margin="20,0,0,0" Click="btnNextClick2"/>
        <Button Content="Page3" Margin="20,0,0,0" Click="btnNextClick3"/>
    </StackPanel>
</StackPanel>

You should wait to navigate to Page2 until the navigation to Page1 has been completed by handling the Navigated event: 您应该等待导航到Page2直到通过处理Navigated事件完成对Page1的导航为止:

private void btnNextClick(object sender, RoutedEventArgs e)
{
    navi.Navigated += Navi_Navigated1; ;
    navi.Navigate(page1);
}

private void Navi_Navigated1(object sender, NavigationEventArgs e)
{
    navi.Navigated -= Navi_Navigated1;
    navi.Navigate(page2);
}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM