C# wpf框架。导航可以';当调用两次时,不推堆栈

C# wpf框架。导航可以';当调用两次时,不推堆栈,c#,wpf,C#,Wpf,如上面的代码所示,我希望框架首先导航到“page1”,然后导航到“page2”。 结果,它确实导航到了“page2”,但我在Fram.BackStack中没有看到“page1”。所以我无法返回。我发现Frame.Navigating事件触发了两次,而Frame.Navigated触发了一次。第一次导航似乎被取消了,我想知道为什么? 还有,还有其他方法可以达到这种效果吗?(导航到第1页并快速导航到第2页--->然后导航回第1页) 其他信息: 我的完整c#代码: 以及我的xaml代码: publi

如上面的代码所示,我希望
框架首先导航到“page1”,然后导航到“page2”。

结果,它确实导航到了“page2”,但我在
Fram.BackStack
中没有看到“page1”。所以我无法返回。我发现
Frame.Navigating
事件触发了两次,而
Frame.Navigated
触发了一次。第一次导航似乎被取消了,我想知道为什么?

还有,还有其他方法可以达到这种效果吗?(导航到第1页并快速导航到第2页--->然后导航回第1页)

其他信息:

我的完整c#代码:

以及我的xaml代码:

 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);
    }
}


您应该等待导航到
Page2
,直到通过处理
导航的
事件完成导航到
Page1

<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>

您应该等待导航到
Page2
,直到通过处理
Navigated
事件完成导航到
Page1

<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>

您的用例是什么?@Dido我添加了一些代码信息,请转到
Page1
中的
Navigated
事件。检查您是否来自
主页
。如果是,请导航到
Page2
。您的用例是什么?@Dido我添加了一些代码信息转到
Page1
中的
Navigated
事件。检查您是否来自
主页
。如果是,请导航到第2页。
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);
}