怎么把App的默认frame改成"sub frame"?
How to change the default frame of the App to a "sub frame"?
我非常需要帮助。使用 SplitView 开发 WinRT 应用程序 (Windows 10)。使用 MVVMLight(而不是 Template10),因为我已经在标准 MVVM 中做了很多工作来改变它。我在一个名为 Shell 的单独 class 中添加了 SplitView,这就是我在许多不同教程中看到的做法。
您可能已经知道,SplitView 基本上在应用程序中具有永久 sidebar/pane,而内容页面在较小的框架内加载。我似乎无法将现有的视图加载到 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 中定义的框架内显示我的所有视图,但遇到了问题。我 不是 在视图中导航,我使用的是 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);
}
MainPage 甚至不会出现在 ShellViewFrame 中,除非我在 Shell class 代码隐藏中导航到它。
所以,我的问题是:是否可以将 ShellViewFrame 设置为 NavigationService 的默认框架?或者,我能否在整个应用程序中获取对 ShellViewFrame 的引用,以便所有视图都加载到较小的框架中?还是有其他方法可以完全做到这一点?
如果您只想在您的 SplitView.Content
中加载视图,例如,如果您的 SpiltView
在您的 MainPage
中,您应该使用:
ShellViewFrame.Navigate(typeof(...));
因此,如果您想显示 SpiltView
及其 ShellViewFrame
,您可以继续在 App.xaml.cs
中加载 MainPage
rootFrame.Navigate(typeof(MainPage), e.Arguments);
并在 MainPage.xaml.cs
的 MainPage()
中添加:
ShellViewFrame.Navigate(typeof(Shell));
或者,第二种方式,你可以参考GitHub中的这个Sample,这种方式比较好
我非常需要帮助。使用 SplitView 开发 WinRT 应用程序 (Windows 10)。使用 MVVMLight(而不是 Template10),因为我已经在标准 MVVM 中做了很多工作来改变它。我在一个名为 Shell 的单独 class 中添加了 SplitView,这就是我在许多不同教程中看到的做法。
您可能已经知道,SplitView 基本上在应用程序中具有永久 sidebar/pane,而内容页面在较小的框架内加载。我似乎无法将现有的视图加载到 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 中定义的框架内显示我的所有视图,但遇到了问题。我 不是 在视图中导航,我使用的是 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);
}
MainPage 甚至不会出现在 ShellViewFrame 中,除非我在 Shell class 代码隐藏中导航到它。
所以,我的问题是:是否可以将 ShellViewFrame 设置为 NavigationService 的默认框架?或者,我能否在整个应用程序中获取对 ShellViewFrame 的引用,以便所有视图都加载到较小的框架中?还是有其他方法可以完全做到这一点?
如果您只想在您的 SplitView.Content
中加载视图,例如,如果您的 SpiltView
在您的 MainPage
中,您应该使用:
ShellViewFrame.Navigate(typeof(...));
因此,如果您想显示 SpiltView
及其 ShellViewFrame
,您可以继续在 App.xaml.cs
MainPage
rootFrame.Navigate(typeof(MainPage), e.Arguments);
并在 MainPage.xaml.cs
的 MainPage()
中添加:
ShellViewFrame.Navigate(typeof(Shell));
或者,第二种方式,你可以参考GitHub中的这个Sample,这种方式比较好