Xamarin 选项卡式页面错误错误 "The given key was not present"

Xamarin Tabbed Page error Error "The given key was not present"

我在 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 页面:

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() 代码吗?

所以我想通了。如果您重命名项目中的 XAML 和相应的 cs 文件,就会出现此问题。项目文件中似乎出现了一些问题。最简单的做法是使用新名称添加一个新的 XAML 页面,然后将旧 XAML 文件中的内容复制到新文件中。然后它似乎起作用了。在我的例子中,问题是由重命名从 TabbedPage 文件继承的 XAML 页面引起的。希望这对遇到此问题的其他人有所帮助。

仅供参考,如果您包含来自其他项目的 XAML 页面和 cs 文件并重命名它们,问题也会自行显现。在这种情况下,当项目文件被弄乱时,您将收到 InitializeComponent 方法不存在的错误。

我不得不说我真的希望 Xamarin 能很好地工作。我希望现在它归 MS 所有,它成为更可靠的第一层开发解决方案。

我的故事很相似,但有不同的解决方案,所以我想我会把它添加到这里以供后代使用。我有一个现有的视图,它接收一个 ViewModel 作为参数。当我将它作为其中之一包含时,我得到了 "The given Key was not present" 错误。在不传递参数的情况下重写视图后,它就起作用了。

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

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

在我的例子中,我正在制作自定义地图控件并编写与 默认 不同的新构造函数来解决这个问题,我必须同时拥有两个构造函数

        public SAMap()  
        {

        }

        public SAMap(MapSpan region)  
        {

        }