我对UWP开发很新,甚至对Xamarin Forms也没有太多经验。我遇到了一个非常难以调试的情况,这让我想到了框架真正处理的内容,而不仅仅是支持导航和#39;
根据MSDN documentation,Frame类具有以下目的:
显示
Page
个实例,支持导航到新网页,并维护导航历史记录以支持前进和后退导航。
在我找到的所有示例中,VS中的默认模板用于空白UWP应用程序和Xamarin Forms应用程序的模板我看到此代码:
protected override void OnLaunched(LaunchActivatedEventArgs e)
{
Frame rootFrame = Window.Current.Content as Frame;
if (rootFrame == null)
{
rootFrame = new Frame();
// some code removed for brevity...
Window.Current.Content = rootFrame;
}
if (rootFrame.Content == null)
{
rootFrame.Navigate(typeof(MainPage), e.Arguments);
}
Window.Current.Activate();
}
这看起来很公平,因为应用程序几乎肯定需要在多个页面之间导航。
然而,当人们使用MVVM框架时,例如Caliburn Micro,导航将由此框架处理,Frame
的使用似乎毫无用处。
所以在我的应用程序中,我选择删除模板代码并将正常Page
作为元素。这按预期工作,它只会显示这个视图。
但是当我将它与Xamarin Forms结合使用时,加上CommandBar
,其中我放置了一个没有图标集的默认'AppBarButton',该应用程序抛出异常。
当我用Frame
再次更改根元素时,异常消失了。在AppBarButton
中放置一个有效的图标也会使例外情况与正常的Page
一起消失。
为了让一切正常工作,视觉树的元素必须是Frame
,因为显然Frame
会影响AppBarButton
的正确运作吗?
修改
我对解决异常并不感兴趣。但如果它有助于解释Frame
幕后的内容,我创建了一个回购here