Xaml 在Xamarin.Forms中为ContentPage使用自定义基类

Xaml 在Xamarin.Forms中为ContentPage使用自定义基类,xaml,xamarin,xamarin.forms,Xaml,Xamarin,Xamarin.forms,我想在Xamarin.Forms中为我的页面使用自定义内容页面。我尝试创建一个自定义类并用xaml指定页面,如下所示: <local:ContentPage xmlns="http://xamarin.com/schemas/2014/forms" xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml" xmlns:local="clr-namespace:Xa

我想在Xamarin.Forms中为我的页面使用自定义内容页面。我尝试创建一个自定义类并用xaml指定页面,如下所示:

<local:ContentPage xmlns="http://xamarin.com/schemas/2014/forms"
                   xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
                   xmlns:local="clr-namespace:XamarinFormsApp.Controls"
                   x:Class="XamarinFormsApp.Views.WelcomeView">

    <Label Text="{Binding MainText}" VerticalOptions="Center" HorizontalOptions="Center" />

</local:ContentPage>

这(通常)可以在xaml中工作,但在Xamarin.Forms中会出现以下错误:

Error   7   The "XamlG" task failed unexpectedly.
System.Exception: Can't load types from xmlns clr-namespace:XamarinFormsApp.Controls
   at Xamarin.Forms.Build.Tasks.XamlG.GetNamespace(String namespaceuri)
   at Xamarin.Forms.Build.Tasks.XamlG.GetType(String nsuri, String type, IList`1 typeArguments, Func`2 getNamespaceOfPrefix)
   at Xamarin.Forms.Build.Tasks.XamlG.GenerateFile(String xamlFile, String outFile)
   at Xamarin.Forms.Build.Tasks.XamlG.Execute()
   at Microsoft.Build.BackEnd.TaskExecutionHost.Microsoft.Build.BackEnd.ITaskExecutionHost.Execute()
   at Microsoft.Build.BackEnd.TaskBuilder.<ExecuteInstantiatedTask>d__20.MoveNext() XamarinFormsApp.iOS
错误7“XamlG”任务意外失败。
System.Exception:无法从xmlns clr命名空间:XamarinFormsApp.Controls加载类型
位于Xamarin.Forms.Build.Tasks.XamlG.GetNamespace(字符串namespaceuri)
位于Xamarin.Forms.Build.Tasks.XamlG.GetType(字符串nsuri,字符串类型,IList`1类型参数,Func`2 getNamespaceOfPrefix)
位于Xamarin.Forms.Build.Tasks.XamlG.GenerateFile(字符串xamlFile,字符串outFile)
在Xamarin.Forms.Build.Tasks.XamlG.Execute()处
位于Microsoft.Build.BackEnd.TaskExecutionHost.Microsoft.Build.BackEnd.ItaskeExecutionHost.Execute()
在Microsoft.Build.BackEnd.TaskBuilder.d_u20.MoveNext()XamarinFormsApp.iOS

这(还)不受支持,还是我做错了什么?

这在2014-06-04发布的
Xamarin.Forms 1.0.6197中得到了修复

此外,您的xmlns:local将丢失
程序集
属性。它应该是
xmlns:local=“clr namespace:XamarinFormsApp.Controls;assembly=XamarinFormsApp”

更新:
如果您正在从同一程序集中加载类型,则不再需要xmlns中的程序集部分

Cool,不知道表单是通过NuGet分发的!通常在xaml中(在本例中,我也不必这样做)。谢谢我也有同样的问题,但是nuget没有显示包的更新,并且nuget包和程序集引用上的版本号都高于答案中所述的版本号。这个又坏了吗?还有别的解决办法吗?我的是一个共享项目,不是PCL,但这不应该真的有什么区别。等等,我错了——我目前拥有的nuget软件包只有1.0.6186。不幸的是,nuget update函数由于某些原因无法工作。我必须在XAML命名空间声明中包含程序集名称以解决运行时异常。对于Windows的XAML,本地程序集是隐式的。但是,对于Xamarin.Forms,我必须显式标识命名空间的程序集,以便进行绑定。