Xamarin标签页错误错误“给定的密钥不存在”

时间:2016-09-28 17:21:43

标签: c# xaml visual-studio-2015 xamarin.forms tabbed

我在Visual Studio 2015中创建了一个新的空白Xamarin PCL应用程序。它在所有平台上运行。然后我将一个名为GuyBarSceneTabs的XAML页面添加到我的PCL并在我的PCL中更改我的app.cs文件,因此App()代码只包含

MainPage = new GuyBarSceneTabs();

这一切都有效,我可以再次运行项目,它显示我的XAML页面。 接下来,我添加另一个XAML页面名称NearbyLocations

<?xml version="1.0" encoding="utf-8" ?>
<ContentPage xmlns="http://xamarin.com/schemas/2014/forms"
             xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
             x:Class="GuyBarScene.NearbyLocations"
             Title= "Nearby Locations">

</ContentPage>

我还将GuyBarSceneTabs页面更改为标签页,如下所示,并将页面后面的代码更改为继承自TabbedPage:

<?xml version="1.0" encoding="utf-8" ?>
<TabbedPage xmlns="http://xamarin.com/schemas/2014/forms"
            xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
            xmlns:local="clr-namespace:GuyBarScene;assembly=GuyBarScene"
            x:Class="GuyBarScene.GuyBarSceneTabs">    
    <TabbedPage.Children>        
        <local:NearbyLocations  />         
    </TabbedPage.Children>
</TabbedPage>       
        
</TabbedPage.Children>

public partial class GuyBarSceneTabs : TabbedPage
{
    public GuyBarSceneTabs()
    {
        InitializeComponent();
    }
}

现在,当我尝试运行应用程序时,我收到错误消息:“给定的密钥不存在于字典中。在以下代码中生成错误,该代码是从GuyBarSceneTabs页面的InitializeComponent方法调用的:

public partial class GuyBarSceneTabs : global::Xamarin.Forms.TabbedPage {

    [System.CodeDom.Compiler.GeneratedCodeAttribute("Xamarin.Forms.Build.Tasks.XamlG", "0.0.0.0")]
    private void InitializeComponent() {
        this.LoadFromXaml(typeof(GuyBarSceneTabs));
    }
}

关于我做错了什么的任何建议?我是否需要以某种方式更改我的App()代码?

3 个答案:

答案 0 :(得分:2)

我的故事很相似,但有一个不同的解决方案,所以我想我会在这里为后人添加它。我有一个现有的View,它接收一个ViewModel作为参数。当我把它包括在其中一个我得到“给定的密钥不存在”错误。在不传入参数的情况下重写View时,它就可以工作。

答案 1 :(得分:0)

所以我想出来了。如果在项目中重命名XAML和相应的cs文件,则会出现此问题。它似乎在项目文件中搞砸了。最简单的方法是添加一个带有新名称的新XAML页面,并将旧XAML文件中的内容复制到新文件中。然后它似乎工作。在我的情况下,问题是由重命名继承自TabbedPage文件的XAML页面引起的。希望这可以帮助其他有此问题的人。

仅供参考,如果您从其他项目中包含XAML页面和cs文件并将其重命名,则问题也会显现。在这种情况下,当项目文件搞砸时,您将收到一条错误,即抛出不存在InitializeComponent方法。

我不得不说我真的希望Xamarin能够很好地运作。我希望它现在由MS拥有,它变成了一个可靠的第一层开发解决方案。

答案 2 :(得分:0)

在我的案例中,问题的关键 - 默认无参数构造函数被修改(添加参数)。

再次添加默认构造函数后 - 编译错误消失。