在 Xamarin.Forms 中为 ContentPage 使用自定义基类
Posted
技术标签:
【中文标题】在 Xamarin.Forms 中为 ContentPage 使用自定义基类【英文标题】:Use custom base class for ContentPage in Xamarin.Forms 【发布时间】:2014-07-24 05:06:58 【问题描述】:我想在 Xamarin.Forms 中为我的页面使用自定义 ContentPage。我尝试创建一个自定义类并像这样在 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
这是(还)不受支持还是我做错了什么?
【问题讨论】:
【参考方案1】:此问题已在 2014 年 6 月 4 日发布的 Xamarin.Forms 1.0.6197
中修复。
另外,您的 xmlns:local 缺少 assembly
属性。应该是xmlns:local="clr-namespace:XamarinFormsApp.Controls;assembly=XamarinFormsApp"
更新: 如果您从同一个程序集加载类型,则不再需要 xmlns 中的程序集部分
【讨论】:
酷,不知道表单是通过 NuGet 分发的!通常在 xaml 中(在这种情况下,我也不必这样做)。谢谢! 我遇到了同样的问题,但是 nuget 显示没有对包的更新,并且 nuget 包和程序集引用上的版本号都高于答案中所述的版本号。这又破了?还有其他解决方案吗?我的是一个共享项目而不是 PCL,但这不应该有什么不同。 等等,我错了——我目前拥有的 nuget 包只有 1.0.6186。不幸的是,由于某种原因,nuget 更新功能无法正常工作。 我必须在 XAML 命名空间声明中包含程序集名称才能解决运行时异常。对于 Windows 的 XAML,本地程序集是隐式的。但是,对于 Xamarin.Forms,我必须显式标识名称空间的程序集才能进行绑定。 我还必须在 XAML 中包含程序集名称,以解决在后面的代码中遇到 InitializeComponent() 问题。 'InitializeComponent 在当前上下文中不存在'以上是关于在 Xamarin.Forms 中为 ContentPage 使用自定义基类的主要内容,如果未能解决你的问题,请参考以下文章
Xamarin.Forms中为WebView指定数据来源Source
如何在Xamarin.Forms中为StackLayout正确创建自定义渲染器?
CollectionView Xamarin.Forms 中的 RefreshView