C# 嵌套框架导航

C# 嵌套框架导航,c#,xaml,uwp,navigation,C#,Xaml,Uwp,Navigation,下面是我的问题情况的一个简化示例 MainPage.xaml <page ... xmlns:helpers="using:MyNamespace.Helpers" xmlns:views="using:MyNamespace.Views" ...> <NavigationView Name="MainNav" PaneDisplayMode="LeftCompact"

下面是我的问题情况的一个简化示例

MainPage.xaml

<page
    ...
    xmlns:helpers="using:MyNamespace.Helpers"
    xmlns:views="using:MyNamespace.Views"
    ...>

    <NavigationView Name="MainNav"
                    PaneDisplayMode="LeftCompact"
                    ...>
        <NavigationView.MenuItems>
            <NavigationViewItem Content="OtherPage"
                                helpers:NavHelper.NavigateTo="views:OtherPage">
                </NavigationViewItem>
                ... other NavigationViewItem's...
        </NavigationView.MenuItems>

        <Frame Name="MainFrame".../>   
</page>
OtherPage.xaml-在视图文件夹中

<page
    ...
    xmlns:helpers="using:MyNamespace.Helpers"
    xmlns:views="using:MyNamespace.Views"
    ...>

    <NavigationView Name="OtherNav"
                    PaneDisplayMode="Top"
                    ...>
        <NavigationView.MenuItems>
            <NavigationViewItem Content="Other Page"
                                helpers:NavHelper.NavigateTo="views:OtherPage_1">
                </NavigationViewItem>
                ... other NavigationViewItem's...
        </NavigationView.MenuItems>

        <Frame Name="OtherFrame".../>   
</page>
Navigate.cs-在服务文件夹中

namespace MyNamespace.Services
{
    static class Navigate
    {
        public static void NavView_ItemInvoked(NavigationView sender, NavigationViewItemInvokedEventArgs args)
        {
            \\ do some navigation logic
            ...
            private _frame = ???;
            ...

            _frame.Navigate(_page, null, transitionInfo);
        }
好的,在所有这些示例代码之后,这里是我的问题。在
NavView\u items invoked
事件处理程序中,我需要能够根据调用的
NavigationViewItem
设置
\u frame
;到
大型机
其他帧


注意:我可能会离开我应用程序中的嵌套框架,但我首先想弄清楚这一点,因为我不想浪费学习机会。

当触发ItemInvoked事件时,您可以从中获取NavigationView实例。NavigationView具有Content属性,它实际上表示当前触发的navigationView中的帧。因此,您可以通过Frame.name获取大型机或其他帧

static class MyNavigate
    {​
        public static void NavView_ItemInvoked(NavigationView sender, NavigationViewItemInvokedEventArgs args)​
        {​
            Frame currentFrame = sender.Content as Frame;​
            String name = currentFrame.Name;​
            if (name == "OtherFrame")​
            {​
                currentFrame.Navigate(.......);​
            }​
            else {​
                currentFrame.Navigate(.......);​
            }​
        }​
    }

谢谢你,费旺。在我的脑海中,框架应该被内容所包含,比如
sender.Content.myFrame
。显然,我错了。
namespace MyNamespace.Services
{
    static class Navigate
    {
        public static void NavView_ItemInvoked(NavigationView sender, NavigationViewItemInvokedEventArgs args)
        {
            \\ do some navigation logic
            ...
            private _frame = ???;
            ...

            _frame.Navigate(_page, null, transitionInfo);
        }
static class MyNavigate
    {​
        public static void NavView_ItemInvoked(NavigationView sender, NavigationViewItemInvokedEventArgs args)​
        {​
            Frame currentFrame = sender.Content as Frame;​
            String name = currentFrame.Name;​
            if (name == "OtherFrame")​
            {​
                currentFrame.Navigate(.......);​
            }​
            else {​
                currentFrame.Navigate(.......);​
            }​
        }​
    }