我在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()代码?
答案 0 :(得分:2)
我的故事很相似,但有一个不同的解决方案,所以我想我会在这里为后人添加它。我有一个现有的View,它接收一个ViewModel作为参数。当我把它包括在其中一个我得到“给定的密钥不存在”错误。在不传入参数的情况下重写View时,它就可以工作。
答案 1 :(得分:0)
所以我想出来了。如果在项目中重命名XAML和相应的cs文件,则会出现此问题。它似乎在项目文件中搞砸了。最简单的方法是添加一个带有新名称的新XAML页面,并将旧XAML文件中的内容复制到新文件中。然后它似乎工作。在我的情况下,问题是由重命名继承自TabbedPage文件的XAML页面引起的。希望这可以帮助其他有此问题的人。
仅供参考,如果您从其他项目中包含XAML页面和cs文件并将其重命名,则问题也会显现。在这种情况下,当项目文件搞砸时,您将收到一条错误,即抛出不存在InitializeComponent方法。
我不得不说我真的希望Xamarin能够很好地运作。我希望它现在由MS拥有,它变成了一个可靠的第一层开发解决方案。
答案 2 :(得分:0)
在我的案例中,问题的关键 - 默认无参数构造函数被修改(添加参数)。
再次添加默认构造函数后 - 编译错误消失。