2016-09-28 36 views
1

我在Visual Studio 2015中创建了一个新的空白Xamarin PCL应用程序。它在所有平台上运行。我再补充一个XAML页面命名GuyBarSceneTabs我的PCL和改变我的app.cs文件在我的PCL以便与App()代码只包含Xamarin选项卡式页面错误错误“给定的键不存在”

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

+0

它是一个复制和粘贴错误?否则,在XAML页面的末尾会有一个额外的。此外,这看起来像Xamarin.Forms的旧版本中的错误。你正在使用哪个版本? –

+0

对不起,这是复制粘贴错误。根据Nuget的说法,我正在使用最新版本的Xamarin表单 - 版本2.3.2.127 –

回答

0

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

仅供参考如果您在其他项目中包含XAML页面和cs文件并重新命名它们,也可能会出现问题。在这种情况下,当项目文件变得混乱时,将会抛出InitializeComponent方法不存在的错误。

我不得不说我真的希望Xamarin能够很好地工作。我希望现在它已经被MS所有,它变成了更可靠的第一级开发解决方案。

2

我的故事很相似,但有一个不同的解决方案,所以我想我会在这里为后代添加它。我有一个现有的视图,收到ViewModel作为参数。当我把它作为我得到“给定密钥不存在”错误的一个时。重写视图而不传入参数,然后它工作。

+1

这正是我的问题。这再一次证明了Xamarin的早期开发阶段,给出了你完全不相关的问题得到的神秘错误信息。:( – Exa

0

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

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

0

在我的情况我正在自定义地图的控制和写入新的构造是从默认一个不同的解决这个问题,我必须有两个构造

 public SAMap() 
     { 

     } 

     public SAMap(MapSpan region) 
     { 

     }