2016-09-28 25 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) 
     { 

     }