在 Windows 10 XAML 中的视图之间导航
Navigating between views in Windows 10 XAML
我已经尝试了多种方法来解决这个问题,但是在 Windows10 中尝试在一个页面和另一个页面之间导航时,我遇到了一些奇怪的行为。我在 app.xaml.cs:
中显示我的第一页
View.MainPageView mp = new View.MainPageView();
Window.Current.Content = mp;
这样可以正常显示主页;然而,我有一个命令可以有效地为我的第二页做同样的事情:
View.SecondView dv = new View.SecondView();
Window.Current.Content = dv;
出现的情况是它显示了第二页,但它是空白的。当我尝试使用 XAML Spy 检查它时,它显示页面在那里;但是,它根本没有任何内容(即没有控件显示)。
Windows 10 有什么特别之处可以解释这种情况,或者,以这种方式覆盖内容是否有什么可以解释这种行为的?
编辑:
问题似乎是由使用绑定命令引起的,而不是为了导航而进行的处理;以下代码适用于点击事件:
Frame rootFrame = Window.Current.Content as Frame;
rootFrame.Navigated += RootFrame_Navigated;
rootFrame.Navigate(typeof(View.SecondView), null);
但是当从绑定命令调用时,虽然它仍然显示视图,但它始终是空白的。我最初认为这可能与调用线程有关,但使用 UI 线程调度程序没有任何区别。
Windows 10 使用与 8.1 相同的方法。
如果您在 Visual Studio 中创建一个新项目并打开 App.xaml.cs 您可以找到 OnLaunched
方法。在此方法中,您可以看到 Frame
的实例已创建并分配给 Window.Current.Content
。 Frame
将帮助您管理整个导航。此方法的末尾是导航到 MainPage。
rootFrame.Navigate(typeof(MainPage), e.Arguments);
如果你想从主页导航到第二页,你必须使用:
Frame.Navigate(typeof(SecondPage));
要返回主页只需调用:
if (Frame.CanGoBack)
{
Frame.GoBack();
}
我已经尝试了多种方法来解决这个问题,但是在 Windows10 中尝试在一个页面和另一个页面之间导航时,我遇到了一些奇怪的行为。我在 app.xaml.cs:
中显示我的第一页View.MainPageView mp = new View.MainPageView();
Window.Current.Content = mp;
这样可以正常显示主页;然而,我有一个命令可以有效地为我的第二页做同样的事情:
View.SecondView dv = new View.SecondView();
Window.Current.Content = dv;
出现的情况是它显示了第二页,但它是空白的。当我尝试使用 XAML Spy 检查它时,它显示页面在那里;但是,它根本没有任何内容(即没有控件显示)。
Windows 10 有什么特别之处可以解释这种情况,或者,以这种方式覆盖内容是否有什么可以解释这种行为的?
编辑:
问题似乎是由使用绑定命令引起的,而不是为了导航而进行的处理;以下代码适用于点击事件:
Frame rootFrame = Window.Current.Content as Frame;
rootFrame.Navigated += RootFrame_Navigated;
rootFrame.Navigate(typeof(View.SecondView), null);
但是当从绑定命令调用时,虽然它仍然显示视图,但它始终是空白的。我最初认为这可能与调用线程有关,但使用 UI 线程调度程序没有任何区别。
Windows 10 使用与 8.1 相同的方法。
如果您在 Visual Studio 中创建一个新项目并打开 App.xaml.cs 您可以找到 OnLaunched
方法。在此方法中,您可以看到 Frame
的实例已创建并分配给 Window.Current.Content
。 Frame
将帮助您管理整个导航。此方法的末尾是导航到 MainPage。
rootFrame.Navigate(typeof(MainPage), e.Arguments);
如果你想从主页导航到第二页,你必须使用:
Frame.Navigate(typeof(SecondPage));
要返回主页只需调用:
if (Frame.CanGoBack)
{
Frame.GoBack();
}