我反复收到此错误消息:部分声明不得指定不同的基类。有人可以告诉我这可能是什么原因。这是我的代码。
CashAdvancePage.xaml
<?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="ebmsMobile.CashAdvancePage"
Title="Cash Advance"
BackgroundImage="bg3.jpg">
<Label Text="This is the Cash Advance Page." VerticalOptions="Center" HorizontalOptions="Center" />
</ContentPage>
CashAdvancePage.xaml.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Xamarin.Forms;
namespace ebmsMobile
{
public partial class CashAdvancePage : ViewCell
{
public CashAdvancePage()
{
//InitializeComponent();
//NavigationPage.SetHasNavigationBar(this, false);
var image = new Image
{
HorizontalOptions = LayoutOptions.Start
};
image.SetBinding(Image.SourceProperty, new Binding("ImageUri"));
image.WidthRequest = image.HeightRequest = 40;
var nameLayout = CreateNameLayout();
var viewLayout = new StackLayout()
{
Orientation = StackOrientation.Horizontal,
Children = { image, nameLayout }
};
View = viewLayout;
}
static StackLayout CreateNameLayout()
{
var nameLabel = new Label
{
HorizontalOptions= LayoutOptions.FillAndExpand
};
nameLabel.SetBinding(Label.TextProperty, "DisplayName");
var twitterLabel = new Label
{
HorizontalOptions = LayoutOptions.FillAndExpand,
Font = Fonts.Twitter
};
twitterLabel.SetBinding(Label.TextProperty, "Twitter");
var nameLayout = new StackLayout()
{
HorizontalOptions = LayoutOptions.StartAndExpand,
Orientation = StackOrientation.Vertical,
Children = { nameLabel, twitterLabel }
};
return nameLayout;
}
}
}
答案 0 :(得分:3)
当您在XAML文件中将其用作Rootelement时,需要从.cs中继承ContentPage。
另一个问题是,您需要将“viewLayout”分配给Content而不是View。
using Xamarin.Forms;
namespace ebmsMobile
{
public partial class CashAdvancePage : ContentPage // derive from ContentPage
{
public CashAdvancePage()
{
//InitializeComponent();
//NavigationPage.SetHasNavigationBar(this, false);
var image = new Image
{
HorizontalOptions = LayoutOptions.Start
};
image.SetBinding(Image.SourceProperty, new Binding("ImageUri"));
image.WidthRequest = image.HeightRequest = 40;
var nameLayout = CreateNameLayout();
var viewLayout = new StackLayout()
{
Orientation = StackOrientation.Horizontal,
Children = { image, nameLayout }
};
Content = viewLayout; // <-- Set the ViewLayout as Content
}
static StackLayout CreateNameLayout()
{
var nameLabel = new Label
{
HorizontalOptions = LayoutOptions.FillAndExpand
};
nameLabel.SetBinding(Label.TextProperty, "DisplayName");
var twitterLabel = new Label
{
HorizontalOptions = LayoutOptions.FillAndExpand,
// Font = Fonts.Twitter
};
twitterLabel.SetBinding(Label.TextProperty, "Twitter");
var nameLayout = new StackLayout()
{
HorizontalOptions = LayoutOptions.StartAndExpand,
Orientation = StackOrientation.Vertical,
Children = { nameLabel, twitterLabel }
};
return nameLayout;
}
}
}
答案 1 :(得分:1)
你在这里混合了两个不同的东西:一个页面和一个视图单元格。
可以通过代码和使用XAML创建页面和视图单元格,但它们是分开的。
在XAML中创建任何组件时,无论是页面还是视图,根节点类型必须是您要子类化的类型。 然后,.cs文件后面的代码必须从相同的基类派生,或者你可以在代码隐藏中完全省略基类,因为部分类不必重新声明它们派生的类。
因此,对于CashAdvance页面定义,请务必从代码隐藏中的类定义中删除“:ViewCell”部分。
然后你应该在XAML中构建你的页面(否则,无论如何,如果你在代码中构建它,那么使用xaml页面有什么意义呢?)
如果你确实需要一个自定义的视单元(例如,在ListView中使用),那么为你的viewcell创建另一个.xaml文件,并在那里构建它自己的ui。 然后,您可以在页面XAML中或从代码隐藏中引用它。
有关使用XAML的更多详细信息,请查看the Xamarin XAML documentation
答案 2 :(得分:0)
一般而言,请将xaml主标签与.cs文件中的继承匹配,以防止发生不同的基类错误 所以如果:
<contentPage xmlns="http://xamarin......> </contentPage >
.cs文件通常为
public partial class myPage : contentPage { ........}
答案 3 :(得分:0)
作为较晚的条目...
万一您想为页面创建基类...但是失败了。您可以从其他基类继承。
这是...
1:创建一个基础类页面(带有类背后的代码):
例如,这是我的,但您的可能会不同...
<?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="Pulse.Mobile.Views.BaseContentPage">
</ContentPage>
public partial class BaseContentPage : ContentPage
{
#region <Fields & Constants>
protected Style ValidationEntryErrorStyle = Application.Current.Resources["ValidationEntryErrorStyle"] as Style;
protected Style FormEntryStyle = Application.Current.Resources["FormEntryStyle"] as Style;
#endregion
#region <Constructors>
public BaseContentPage()
{
InitializeComponent();
}
#endregion
#region <Events>
protected override void OnAppearing()
{
base.OnAppearing();
LogHelper.Trace($"Screen - {this}", "Browsed");
}
#endregion
#region <Methods>
protected bool ValidateKeyPress(Entry entry, TextChangedEventArgs e, string regularExpression)
{
var text = e.NewTextValue;
// Allow Empty
if(string.IsNullOrWhiteSpace(text))
return true;
var result = Regex.IsMatch(e.NewTextValue, regularExpression);
return result;
}
protected void ValidateStyle(Entry control, bool isValid)
{
switch (isValid)
{
case false:
control.Style = ValidationEntryErrorStyle;
break;
default:
control.Style = FormEntryStyle;
break;
}
}
protected void ValidateStyle(Picker control, bool isValid)
{
switch (isValid)
{
case false:
control.Style = ValidationEntryErrorStyle;
break;
default:
control.Style = null;
break;
}
}
#endregion
}
2:在您的PAGE中引用基础类页面:
确保在“ xmlns:views”中引用您的视图。请特别注意标记的根元素:
<?xml version="1.0" encoding="utf-8" ?>
<views:BaseContentPage xmlns="http://xamarin.com/schemas/2014/forms"
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
xmlns:views="clr-namespace:Pulse.Mobile.Views;assembly=Pulse.Mobile"
x:Class="Pulse.Mobile.Views.ShakeoutDocumentPage">
<ContentPage.Content>
// YOUR AWESOME CONTENT GOES HERE...
</ContentPage.Content>
</views:BaseContentPage>