[英]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.BackStack
中Fram.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.