UWP中Frame ContentControl的完整用途是什么

时间:2017-06-09 08:38:34

标签: c# uwp xamarin.forms

我对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

编辑2: 也许我错过了一些东西,但是我没有看到任何堆栈跟踪和callstack,而且描述也没什么用处! Capture

0 个答案:

没有答案