Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Partial Declaration must not specify different Base Classes

I repeatedly get this Error Message:Partial Declaration must not specify different Base Classes. Can somebody tell me what may be the cause of this. Here's my code.

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;
    }
    }
}
like image 669
Jaycee Evangelista Avatar asked May 12 '16 04:05

Jaycee Evangelista


2 Answers

As a late entry...

In case you were trying to create a base class for your pages...but it failed. You CAN inherit from a your own custom base class.

Here's how...

1: CREATE A BASE CLASS PAGE (w/ a Code Behind Class):
For example, here is mine, but yours could be different...

<?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: REFERENCE THE BASE CLASS PAGE in your PAGE:
Make sure you reference your views in "xmlns:views". Take special care to notice the pages root element: "<views:BaseContentPage "

<?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>
like image 107
Prisoner ZERO Avatar answered Sep 28 '22 07:09

Prisoner ZERO


You need to inherit from ContentPage in the .cs when you use it as Rootelement in the XAML file.

The other problem is, that you need to assign your "viewLayout" to Content instead of 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;
    }
}
}
like image 42
Marius Junak Avatar answered Sep 28 '22 05:09

Marius Junak