Xamarin.forms Xamarin形式-子类化多页

Xamarin.forms Xamarin形式-子类化多页,xamarin.forms,Xamarin.forms,如何创建Xamarin.Forms.MultiPage的简单子类 在下面的代码中,我有一个多页面,它创建了三个简单页面(每个页面上只有标签和按钮),然后将当前页面设置为定义的第一个页面。 但是,调用setCurrentPage不会改变屏幕上显示的内容。显示的页面始终是我添加到ItemsSource的最后一个页面 这是我的密码 using System; using Xamarin.Forms; using System.Diagnostics; using System.Collections.

如何创建Xamarin.Forms.MultiPage的简单子类

在下面的代码中,我有一个多页面,它创建了三个简单页面(每个页面上只有标签和按钮),然后将当前页面设置为定义的第一个页面。 但是,调用set
CurrentPage
不会改变屏幕上显示的内容。显示的页面始终是我添加到
ItemsSource
的最后一个页面

这是我的密码

using System;
using Xamarin.Forms;
using System.Diagnostics;
using System.Collections.Generic;

namespace NavigationTrial
{
    public class CustomMultiPage : MultiPage<Page>
    {
        public CustomMultiPage () : base()
        {
            var children = new List<Page>() { 
                new SimpleOnePage(), new SimpleTwoPage(), new SimpleThreePage() } ;

            this.ItemsSource = children;
            this.CurrentPage = this.Children[1];
        }

        override protected Page CreateDefault (object item) {
            return (Page)item ;
        }

    }
}
使用系统;
使用Xamarin.Forms;
使用系统诊断;
使用System.Collections.Generic;
命名空间导航试用版
{
公共类CustomMultiPage:MultiPage
{
公共CustomMultiPage():base()
{
var children=新列表(){
新建SimpleOnePage()、新建SimpleTopage()、新建SimpleThreePage()};
this.ItemsSource=子项;
this.CurrentPage=this.Children[1];
}
覆盖受保护的页面CreateDefault(对象项){
返回(第页)项;
}
}
}

我想我遗漏了一些东西,但我找不到任何能为我澄清这一点的例子。

当然,这就是多页的工作原理

你所做的只是一个版面一个版面地堆叠,当它们都在屏幕上时,改变哪一个是“当前页面”不会有多大作用。 如果你打算这样做,那么你必须手动管理他们的布局

基本上,改变你不想看到的页面的布局,这样它们就不会碍事了。 大概是这样的:

private Rectangle GetPageClosedRectangle()
{
    return new Rectangle(Width, 0, Width, Height);   
}

private Rectangle GetPageOpenedRectangle()
{
    return new Rectangle(0, 0, Width, Height);
}
然后在需要隐藏/显示页面时交换页面:

PageIDontWantToSee.LayoutTo(getPageClosedRectangle());
PageIWantToSee.LayoutTo(getPageOpenedRectangle());

“LayoutTo”方法是一种异步方法,它将布局设置为设置的矩形。如果您想立即使用,您可以使用
page.Layout(矩形)

我还注意到设置CurrentPage对MultiPage没有效果(而对TabbedPage则没有效果)。 因此,我对我想看到的孩子将IsVisible设置为true,对其他孩子设置为false。您甚至可以使用SelectedItem和转换器绑定它


我发现它比前面关于布局的答案更简单。特别是对于windows桌面应用程序,因为您可以调整窗口大小并查看“隐藏”页面。

我知道,我没有意识到页面被保存在屏幕上绘制的堆栈中,因此顶部的页面始终可见。这是一个聪明的主意。我只是没有意识到所有的页面都是在屏幕上绘制的,最后绘制的页面与之前的页面重叠。