在 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之探索笔记

Xamarin.Forms中为WebView指定数据来源Source

如何在Xamarin.Forms中为StackLayout正确创建自定义渲染器?

CollectionView Xamarin.Forms 中的 RefreshView

如何使用 C++ 非托管库在 Visual Studio 2017 中为 Xamarin.Forms 设置项目?

在 Xamarin.Forms 中将 HeightRequest 设置回 Auto