2017-02-17 69 views
2

我在Xamarin寫了這個XAML代碼窗體應用程序(多平臺):需要更改組件名稱Xamarin窗體應用程序

<?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:MyNameSpace;assembly=MyAssemblyName" 
      Padding="0,20,0,0"> 

<TabbedPage.Children> 

    <local:Page1 /> 
    <local:Page2 /> 
... 

myNameSpace對象是命名空間我已在項目創建選擇,並且MyAssemblyName是項目名。

1和Page 2有其他XAML/CS頁

這是行不通的。我在Xamarin預覽和執行時出錯。那些錯誤說我的程序集名稱沒有找到或類似的東西。

我檢查了iOS和Android子項目中的選項。那些在創建時自動生成的選項。

我看到裝配的名稱是:MyAssemblyName.iOS和MyAssemblyName.Droid 我已經改名既MyAssemblyName和我的項目工程

我的問題是:

  • 這是個好東西對於iOS和Android項目有相同的程序集名稱?

  • 爲什麼這個標籤不適用於默認的程序集名稱?

感謝

+0

如果您正在使用表單項目,則需要儘可能多的代碼共享並在PCL名稱空間內。例如,要在自定義控件中加載,您可以在PCL中構建它們並引用程序集,如MyProject.MyCustomControlFolder.PCL。我想不出你想要在表單項目中引用XAML中特定於平臺的命名空間的場景。表單中平臺特定的UI工作通常通過自定義渲染進行處理。 –

+0

所以你的意思是像我一樣重命名是最好的解決方案? – Bob5421

+0

不,我的意思是沒有在您的XAML中引用特定平臺(droid/ios/win)是最好的解決方案。 –

回答

4

你可能在一個 「共享工程」。如果是這種情況,您在解決方案中擁有的每個平臺都有一個程序集,但共享項目(您編寫大部分代碼的那個)沒有。

此錯誤的解決方案是簡單地從xmlns:local字符串中刪除assembly=MyAssemblyName。它應該是xmlns:local="clr-namespace:MyNameSpace;"

+0

它不起作用。實際上,創建項目時創建的一個跨平臺形成應用程序。當你在談論PCL時,你有沒有創建一個空的解決方案,然後添加一個pcl庫?這不是一回事嗎?您是否爲iOS和Android添加了單個項目?在哪些情況下,我應該與表格應用程序和我哪些情況下,我應該去與pcl?謝謝 – Bob5421

+0

當你創建一個Xamarin.Forms應用程序時,你必須在Shared Project和PCL Project之間進行選擇。是的,您可以稍後在解決方案中添加這兩種類型,但我認爲它與此問題無關。不,這些項目是用整個解決方案創建的。對於最後一個問題,關於PCL vs. Shared的爭論頗多。就我個人而言,我發現Shared項目更好地編寫代碼,而不必編寫一堆接口來調用本機代碼,而是使用編譯指令。回到你的錯誤,我經常使用這種類型的xmlns而沒有任何問題。 –

+0

檢查'Page1'和'Page2'的命名空間,因爲如果它們位於另一個文件夾內,則文件夾名稱會添加到命名空間(例如'MyNamespace.Folder.Page1')中。在這種情況下,您必須將本地xmlns添加爲'xmlns:local =「clr-namespace:MyNameSpace.Folder」'。 –