在 Xamarin.Forms 中,我尝试创建一个页面,然后对其进行子类化,如下所示:
public partial class PageA : ContentPage {
public PageA() {InitializeComponent ();}
}
public partial class PageB : PageA {
public PageB() : base() { ... }
}
这两个页面都是带有代码的 xaml 页面,但 Page 页面无法正常工作,我不确定为什么(我是 XAML、Xamarin、C# 的新手,并且基本上是一般编码)。
我现在无法编译代码,因为这一行:
this.FindByName<Label>
给我一个警告:
PageB 不包含“FindByName”的定义,并且最好的扩展方法...需要“Element”类型的接收器
还有这一行:
await Navigation.PushAsync(new PageB());
给出一个错误,指出 PageB 不是 Xamarin.Forms.Page。我不知道为什么 PageA 会被认为是这样的类型,但确实如此。
问题:
- 是否可以创建自定义页面的子类?
- 为什么 ContentPage (PageA) 子类的类被认为是“Element”类型和“Page”类型?为什么 PageB 不被认为是这些类型?
我怀疑我在很多事情上都偏离了方向,所以非常欢迎对我如何措辞问题的任何更正以及我应该问什么问题的指示!
=========== 编辑
回应下面的评论:
PageA
.cs 文件(代码隐藏)具有命名空间AppName.FolderName
,并且 xaml 具有 x:Class 属性值x:Class="AppName.FolderName.PageA"
<?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="AppName.FolderName.PageA">
... (some elements) ...
</ContentPage>
PageB
.cs 文件(代码隐藏)具有命名空间AppName.FolderName.SubFolderName
,并且 xaml 具有 x:Class 属性值x:Class="AppName.FolderName.SubFolderName.PageB"
我有以下参考using AppName.FolderName
,这使我可以访问PageA
class
<?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="AppName.FolderName.SubFolderName.PageB">
</ContentPage>