UWP - 另一个页面内的页面导航('iOS UIContainerView with UINavigationController embeded' 等效?)

UWP - Page navigation within another Page ('iOS UIContainerView with UINavigationController embeded' equivalent?)

我正在将一个 iOS 应用程序移植到一个 UWP 项目,我想做一些事情来避免重复,但不确定如何去做。

在 iOS 上,我会在 UIContainerView 中嵌入一个 UINavigationController,并且能够 push/pop 仅显示屏幕的一部分,而不是将整个页面推到顶部另一个。

有什么方法可以在 UWP 项目上做类似的事情吗?我实际上希望在 Page 中有一个 Page,并且在内页上,能够将新页面推到该页面的顶部。

示例:页面顶部有 3 个导航按钮。它们是 'Tabs',每个按钮将 1 页加载到其下方的区域中。这是一个高度定制的 TabBar。这些按钮最好在自己的页面中包含每 3 个页面的内容。

目前,我正在通过在多个页面中重复使用顶部的按钮来执行此操作。或者我可以根据按下的按钮手动换出多个 UserControl。每页一个UserControl

任何有关首选方法的帮助都将非常有用! 干杯, 戴夫

Is there any way to do something similar on a UWP project? I effectively want to have a Page within a Page

如果我没理解错,可以用Frame

例如:在 MainPage.Xaml 上,您可以用三个 Button 定义一帧:

<Grid Background="{ThemeResource ApplicationPageBackgroundThemeBrush}">
    <StackPanel>
        <Button Name="btnPageOne" Content="Page One" Click="btnPageOne_Click"></Button>
        <Button Name="btnPageTwo" Content="Page Two" Click="btnPageTwo_Click"></Button>
        <Button Name="btnPageThree" Content="Page Three" Click="btnPageThree_Click"></Button>
        <Frame Name="MyFrame" Width="500" Height="600"></Frame>
    </StackPanel>
</Grid>

并且在三个按钮的单击事件上,您可以将框架导航到三个页面:

private void btnPageOne_Click(object sender, RoutedEventArgs e)
{
    MyFrame.Navigate(typeof(PageOne));
}

private void btnPageTwo_Click(object sender, RoutedEventArgs e)
{
    MyFrame.Navigate(typeof(PageTwo));
}

private void btnPageThree_Click(object sender, RoutedEventArgs e)
{
    MyFrame.Navigate(typeof(PageThree));
}

and on the Inner page, be able to push a new page on top of that page.

您可以在 PageOne 上的 StackPanel 中定义一个按钮,如下所示:

<Grid Name="rootGrid" Background="{ThemeResource ApplicationPageBackgroundThemeBrush}">
    <StackPanel Name="myStackPanel">
        <Button  Name="myBtn" Click="myBtn_Click">Click Me to add Page</Button>
    </StackPanel>
</Grid>

并在 Click 事件中向该 StackPanel 添加新的 Frames

private void myBtn_Click(object sender, RoutedEventArgs e)
{
     Frame newFrame = new Frame{
             Width=100,
             Height=100
     };
     myStackPanel.Children.Add(newFrame);
     newFrame.Navigate(typeof(SubPageOne));
}

这是我制作的基本Demo:FrameNavigationSample