如何访问页面框架以通过 UWP 中的 UserControl 对象导航页面?

How do I access a page frame to navigate a page through a UserControl object in a UWP?

我正在开发一个 UWP 应用程序,它使用 Windows.UI.Xaml.Navigation 在 Map 中涉及多个 UserControl 对象。

有时,用户应该能够单击这些对象中的按钮以转到新页面。但是,我不能访问页面的框架,所以我不能使用下面的方法。

Frame.Navigate(typeof([page])); 

如何访问页面框架以使用该方法?

让我知道任何替代方案;我一天的大部分时间都坚持这个!提前感谢你们提供的任何帮助!

我们可以让页面自己导航。只需在您的自定义用户控件中定义一个事件并在其父级(页面)中收听该事件。

以下为例:

  1. 创建自定义用户控件并在其上放置一个按钮以供测试。
  2. 在测试按钮的点击事件中,引发事件以导航父页面。
  3. 在父页面中,监听 UserControl 的事件并调用 Frame.Navigate。

MyControl 的 Xaml:

<UserControl
x:Class="App6.MyControl"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="using:App6"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
mc:Ignorable="d"
d:DesignHeight="300"
d:DesignWidth="400">

<Grid>
    <Button x:Name="testbtn" Margin="168,134,0,134" Click="testbtn_Click">test</Button>
</Grid>
</UserControl>

MyControl 的代码隐藏:

public sealed partial class MyControl : UserControl
{

    public delegate void MyEventHandler(object source, EventArgs e);

    public event MyEventHandler OnNavigateParentReady;

    public MyControl()
    {
        this.InitializeComponent();
    }

    private void testbtn_Click(object sender, RoutedEventArgs e)
    {
        OnNavigateParentReady(this, null);
    }


}

将 MainPage 导航到 SecondPage:

    public MainPage()
    {
        this.InitializeComponent();

        myControl.OnNavigateParentReady += myControl_OnNavigateParentReady;
    }

    private void MyControl_OnNavigateParentReady(object source, EventArgs e)
    {
        Frame.Navigate(typeof(SecondPage));
    }

您可以从当前 Window 的内容中获取对框架的引用。 在您的用户控件后面的代码中尝试:

Frame navigationFrame = Window.Current.Content as Frame;
navigationFrame.Navigate(typeof([page]));

或者,使用 Cast=>

((Frame)Window.Current.Content).Navigate(typeof(Views.SecondPage));