如何将应用程序的默认框架更改为"子框架"?

时间:2015-11-29 14:38:27

标签: c# mvvm windows-runtime mvvm-light

我非常需要帮助。使用SplitView在WinRT应用程序(Windows 10)上工作。使用MVVMLight(而不是Template10),因为我已经在标准MVVM中做了很多工作来改变它。我已经在一个名为Shell的单独类中添加了SplitView,这是我在许多不同教程中看到它的方式。

您可能已经知道,SplitView基本上在应用程序中有一个永久的侧边栏/窗格,而内容页面在较小的框架内加载。我似乎无法将现有的视图加载到SplitView的较小框架中。在我的Shell.xaml中:

  <Grid>
    <SplitView x:Name="ShellSplitView" DisplayMode="CompactOverlay"  IsPaneOpen="{Binding PaneOpen}" 
            CompactPaneLength="40" OpenPaneLength="150">
        <SplitView.Pane>
            <Grid x:Name="SplitViewPane">
          ...
            </Grid>
        </SplitView.Pane>
        <SplitView.Content>
            <Frame x:Name="ShellViewFrame">                    
            </Frame>
        </SplitView.Content>
    </SplitView>
</Grid> 

我试图在SpliteView.Content中定义的Frame中显示我的所有视图,但遇到了麻烦。我浏览视图,我使用MVVM-Light附带的NavigationService的MVVM方法。在我的App.xaml.cs中,我有:

        Frame rootFrame = Window.Current.Content as Frame;

        if (rootFrame == null)
        {
            rootFrame = new Frame();
            rootFrame.NavigationFailed += OnNavigationFailed;

            if (e.PreviousExecutionState == ApplicationExecutionState.Terminated)
            {
                //TODO: Load state from previously suspended application
            }

            Window.Current.Content = new Shell(rootFrame);    
        } 

        if (rootFrame.Content == null)
        {
            rootFrame.Navigate(typeof(Shell), e.Arguments);
        }

除非我在Shell类代码隐藏中导航到它,否则MainPage甚至不会出现在ShellViewFrame中。

所以,我的问题是:是否可以使ShellViewFrame成为NavigationService的默认框架?或者,我是否可以在整个应用程序中获得对ShellViewFrame的引用,以便所有视图在较小的框架内加载?或者有完全不同的方法吗?

1 个答案:

答案 0 :(得分:0)

如果您只想加载SplitView.Content中的观看次数,例如,如果SpiltView位于MainPage,则应使用:

ShellViewFrame.Navigate(typeof(...));

因此,如果您希望SpiltView显示其ShellViewFrame,则可以继续在MainPage

中加载App.xaml.cs
rootFrame.Navigate(typeof(MainPage), e.Arguments);

并在MainPage()的{​​{1}}中添加以下内容:

MainPage.xaml.cs

或者,第二种方式,你可以在GitHub中引用这个Sample,这是一种更好的方法。